Изменение каталога на местоположение файла в find, затем запуск скрипта двумя уровнями выше (как будто он находится в том же dir) - bash

Проблема:

Здравствуйте, я пытаюсь перебрать каждый *.faa файл в нескольких каталогах (например, /path/to/*.faa)

А затем, используя скрипт (./script.py), как если бы скрипт находился в том же каталоге, что и *. faa, возможно ли это с помощью shellscript?

Что я пробовал:

for FAA in $(find . -name "*.faa")
do
    cd ../$FAA
    python3 ../script.py
done

Я пробовал различные варианты этого, но изменение каталога на файл не работает, но я не знаю способа добраться до этого каталога.

Желаемый результат:

Для каждого файла .faa в нескольких каталогах, например /path/to/1.faa, path/2/2.faa, запустите скрипт в каталоге двумя уровнями выше. Как если бы он находился в том же каталоге, что и каждый из *.faa файлов, или, если это невозможно, какое лучшее решение для достижения чего-то подобного?

0
06.07.2018, 15:07
1 ответ
find. -type f -name '*.faa' -execdir python3../script.py ';'

Это выполнит python3../script.pyс каталогом каждого найденного файла в качестве рабочего каталога.

Поскольку ваши слова и ваш код несколько противоречат друг другу, я не уверен, должно ли это быть ../script.pyили ../../script.py.

Также обратите внимание, что это будет работать только в том случае, если файл script.pyдействительно доступен в указанном каталоге. Может быть безопаснее указать абсолютный путь к файлу сценария :

.
find. -type f -name '*.faa' -execdir python3 /path/to/script.py ';'

Приведенный выше сценарий будет выполняться для каждого найденного файла, даже если в каталоге есть несколько .faaфайлов. Чтобы выполнить скрипт только один раз для каждого каталога, в котором есть хотя бы один .faaфайл:

find. -type d -exec sh -c '
    for dir do
        set -- "$dir"/*.faa
        if [ "$#" -gt 0 ]; then
            ( cd "$dir" && python3 /path/to/script.py )
        fi
    done' sh {} +

Это приведет к выполнению короткого сценария оболочки для каждого найденного каталога. Сценарий заглядывает в каталог, чтобы увидеть, есть ли там какие-либо файлы .faa. Если есть, сценарий Python выполняется с этим каталогом в качестве рабочего каталога.

Похожие:

0
28.01.2020, 04:18

Теги

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