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