以下に示すように、複数のサブディレクトリを持つ親ディレクトリがあります。
Parent_directory
subdirectory_1
perlscript.pl
file.fasta
subdirectory_2
perlscript.pl
file_2.fasta
すべてのサブディレクトリでPerl sciptを実行したいと思います。次のコマンドを使用しようとしています
find . -type d | while read d; do perl hoz-3-v1c.pl $d/* ; done
ただし、出力は親ディレクトリに渡されるため、各子ディレクトリに出力を望んでいます。
ベストアンサー1
find
このような場合はまったく悩む必要はないようです。
for dirpath in Parent_directory/*/; do
( cd "$dirpath" && perl perlscript.pl *.fasta )
done
これは、Perlスクリプトが常に呼び出されperlscript.pl
(例ディレクトリレイアウトに示すように)、各ディレクトリでPerlスクリプトを実行する正しい方法は次のとおりです。
perl perlscript.pl *.fasta
上のループでは、括弧はサブシェルを生成します。これはスクリプトの残りの部分に影響を与えず、Perlスクリプトを実行した後にディレクトリを終了するcd
必要はありません。cd
このループはすべてのサブディレクトリを繰り返しParent_directory
、各サブディレクトリで指定されたコマンドを実行します。