parent_directoryの各ディレクトリを繰り返し、特定のファイルに対してコマンドを実行するbashスクリプトを作成する方法。
ディレクトリ構造は次のとおりです。
Parent_dir/
dir1/
acc.bam
dir2/
acc.bam
dir3/
acc.bam
... around 30 directories
これが私が使用したいコマンドです:
java8 -jar /picard.jar CollectRnaSeqMetrics REF_FLAT=/refFlathuman.refflat STRAND_SPECIFICITY=NONE I=acc.bam O=output
ベストアンサー1
一般的な慣用語は
for d in Parent_dir/*/
do
(cd "$d" && $command)
done
ループfor
は、.txtファイルの各ディレクトリに対して一度だけ直接実行されますParent_dir
。各ディレクトリに対してサブシェルが作成されます。サブシェルからそのディレクトリに変更しようとします(たとえば、十分な権限がないと失敗する可能性があります)、成功した場合はコマンドを実行します。成功するかどうかはcd
親シェルに影響を与えないため、間違った場所を心配する必要はありません。
もっと頑丈にしたいなら
(cd "$d" && test -r acc.bam && $command)
acc.bam
ディレクトリが存在し、読み取り可能であることを確認してください。test -w .
書き込み不可能なディレクトリでコマンドを実行したくない場合は、を追加することもできます。
PS上記のどれもBashに限定されません。 /bin/sh はかなり簡単に使用できます。