特定のファイルを別のディレクトリに繰り返し貼り付ける

特定のファイルを別のディレクトリに繰り返し貼り付ける

私のディレクトリの中には、同じ名前のファイルが含まれています(例:* 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ループで使用でき、正規表現を使用してファイル名を確認してください。

関連情報