«@@» в файлах рабочего стола Flatpak

Все можно было сделать на Perl или все в сценарии оболочки. Однако смешивание языков обычно немного запутанно.

Версия сценария оболочки может выглядеть примерно так это (с bash, например):

#!/bin/bash

dirs=( *.frames )

for dir in "${dirs[@]}"; do
    printf 'Working on "%s"\n' "$dir"

    cd "$dir"

    digitfiles=( RawImage_?.tif )

    for file in "${digitfiles[@]}"; do
        newfile="RawImage_0${file#RawImage_}"
        mv "$file" "$newfile"
    done

    stackname="../$dir.mrc"
    tif2mrc -s *.tif "$stackname"

    cd..
done

for f in *.mrc; do
    mv -- "$f" "${f%%.*}".mrc
done

Или, немного более идиоматично (теперь с простым sh, но с использованием find, который понимает-execdir):

#!/bin/sh

echo 'Renaming TIFF files'

find *.frames -type f -name 'RawImage_?.tif' \
    -execdir sh -c 'mv "$1" "RawImage_0${1#RawImage_}"' sh {} ';'

for d in *.frames; do
    printf 'Processing "%s"...\n' "$d"
    tif2mrc -s "$d"/*.tif "${d%%.*}.mrc"
done

(оба примера протестированы только в отношении генерации имени файла)

Измените sh -cна sh -cx, чтобы получить бит вывода для каждого переименованного файла, или добавьте -printперед -execdir.

С помощью -execdirданная команда оболочки будет выполняться с каталогом найденного файла в качестве рабочего каталога.{}$1внутри подоболочки )будут базовым именем найденного файла.

Если дляtif2mrcнеобходимо запустить внутри каталога файлов TIFF, измените цикл на

for d in *.frames; do
    printf 'Processing "%s"...\n' "$d"
    (cd "$d" && tif2mrc -s *.tif "../${d%%.*}.mrc" )
done

Обратите внимание, что в Perl использование обратных кавычек для выполнения команды оболочки возвращает вывод этой команды. Вместо этого вы можете использовать

system("tif2mrc -s *.tif $stackname");

, если вас не интересует вывод tif2mrc.

Кроме того, чтение скрипта или программы, которая меняет каталоги туда и обратно, сбивает с толку. Кроме того, это может привести к нежелательным вещам, если каталог не существует (, chdir("..");затем поднимет вас на один уровень каталога выше ).

Чтобы правильно это сделать, либо выполните команду со смещенным рабочим каталогом, как в моем последнем примере с оболочкой, либо правильно проверьте код возврата исходного chdir()в Perl (, это потенциально все равно приведет к коду, который может быть трудно читать и следовать ).

0
04.12.2019, 16:52
1 ответ

--file-forwarding

If this option is specified, the remaining arguments are scanned, and all arguments that are enclosed between a pair of '@@' arguments are interpreted as file paths, exported in the document store, and passed to the command in the form of the resulting document path. Arguments between '@@u' and '@@' are considered uris, and any file: uris are exported. The exports are non-persistent and with read and write permissions for the application.

плоская упаковка -бег (1)

3
28.01.2020, 03:03

Теги

Похожие вопросы