loop para colar arquivos específicos em diretórios diferentes

loop para colar arquivos específicos em diretórios diferentes

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.walkfunção para recorrer aos diretórios aninhados. Para anexar, você pode usar shutil.copyfileobjdentro do loop, verificando os nomes dos arquivos com uma regex.

informação relacionada