循环将特定文件粘贴到不同目录中

循环将特定文件粘贴到不同目录中

我的一些目录包含类似名称的文件,例如(*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在循环中使用,使用正则表达式检查文件名。

相关内容