
Existem alguns diretórios que contêm um arquivo com nome semelhante, por exemplo (*Sample_name*.base.coverage.txt). E eu gostaria de colar todos os arquivos *base.coverage.txt juntos. Tenho algo escrito, mas não está certo, pois não acho que os esteja colando.
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
Também estou pensando em um método de loop diferente, mas não tenho certeza de como colocar a lista de diretórios em uma matriz.
for x in $dir; do cat /$x/*.base.coverage.txt;done > paste_all_l30.p90.base.cov.norm
Qualquer ajuda? obrigado
Responder1
Experimente isto:
find . -type f -name '*.base.coverage.txt' \
| xargs paste > paste_all_l30.p90.base.cov.norm
Isso funcionará desde que não haja muitos arquivos. Se houver muitos arquivos, então isto:
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
Responder2
tente isto:
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' \;
Responder3
A coisa mais fácil de recorrer a vários diretórios seria escrever um script python curto e usar a os.path.walk
função para recorrer aos diretórios aninhados. Para anexar, você pode usar shutil.copyfileobj
dentro do loop, verificando os nomes dos arquivos com uma regex.