Проблема:
Здравствуйте, я пытаюсь перебрать каждый *.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 файлов, или, если это невозможно, какое лучшее решение для достижения чего-то подобного?
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 выполняется с этим каталогом в качестве рабочего каталога.
Похожие: