質問:
こんにちは、複数のディレクトリ(/ path / to / * .faaなど)にある各* .faaファイルを繰り返したいと思います。
次に、スクリプトが* .faaファイルと同じディレクトリにあるように、スクリプト(./script.py)を使用します。シェルスクリプトでこれは可能ですか?
私が試したこと:
for FAA in $(find . -name "*.faa")
do
cd ../$FAA
python3 ../script.py
done
私はこれを変更しようとしましたが、ディレクトリをファイルに変更しても機能しませんが、ディレクトリにアクセスする方法がわかりません。
希望の出力:
/path/to/1.faa、path/2/2.faa など、複数のディレクトリにある各 .faa ファイルに対して、上記の 2 つのレベルでスクリプトを実行します。すべての* .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
上記のコードは、ディレクトリに複数のファイルがある場合でも、見つかったすべてのファイルに対してスクリプトを実行します。 1つ以上のファイルを含む各ディレクトリに対して一度だけスクリプトを実行するには、次の手順を実行します.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スクリプトを実行します。
関連: