異なるディレクトリに特定のファイルを貼り付けるためのループ

異なるディレクトリに特定のファイルを貼り付けるためのループ

似たような名前のファイル (例: (*Sample_name*.base.coverage.txt) を含むディレクトリがいくつかあります。そして、すべての *base.coverage.txt ファイルを一緒に貼り付けたいと思います。何かは書きましたが、実際には一緒に貼り付けていないと思うので、正確ではありません。

cd /g/bo/vir/analysis
find -type d  |
while read dir; do
if [ -f $dir/*.base.coverage.txt ]; then
    paste  $dir/*.base.coverage.txt >> paste_all_l30.p90.base.cov.norm

fi
done

別のループ方法も考えていますが、ディレクトリのリストを配列に取得する方法がわかりません。

for x in $dir; do cat /$x/*.base.coverage.txt;done > paste_all_l30.p90.base.cov.norm

何か助けていただけますか?ありがとう

答え1

これを試して:

find . -type f -name '*.base.coverage.txt' \
  | xargs paste > paste_all_l30.p90.base.cov.norm

これは、ファイルが多すぎない限り機能します。ファイルが多い場合は、次のようになります。

touch paste_all_l30.p90.base.cov.norm
for file in `find . -type f -name '*.base.coverage.txt'`; do
  paste paste_all_l30.p90.base.cov.norm $file > tmp
  mv tmp paste_all_l30.p90.base.cov.norm
done

答え2

これを試して:

find . -type f -name "*.base.coverage.txt" -exec sh -c 'paste {} paste_all_l30.p90.base.cov.norm > tmp ; mv tmp paste_all_l30.p90.base.cov.norm' \;

答え3

複数のディレクトリを再帰的に処理する最も簡単な方法は、短い Python スクリプトを記述し、関数を使用してネストされたディレクトリを再帰的に処理することです。追加する場合は、ループ内で使用して、正規表現でファイル名をチェックすることos.path.walkができます。shutil.copyfileobj

関連情報