サブディレクトリを繰り返し、各サブディレクトリでPerlスクリプトを実行します。

サブディレクトリを繰り返し、各サブディレクトリでPerlスクリプトを実行します。

以下に示すように、複数のサブディレクトリを持つ親ディレクトリがあります。

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、各サブディレクトリで指定されたコマンドを実行します。

おすすめ記事