问题:
你好,我正在尝试循环遍历多个目录中的每个 *.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 文件位于同一目录中,或者如果不可能,那么实现类似目标的最佳解决方案是什么?
答案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 {} +
这将为每个找到的目录执行一个简短的 shell 脚本。该脚本会查看目录以查看.faa
其中是否有任何文件。如果存在,则以该目录作为工作目录执行 Python 脚本。
有关的: