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

2

Eu tenho alguns diretórios que contêm um arquivo com nome semelhante, por exemplo (* Sample_name * .base.coverage.txt). E gostaria de colar todos os arquivos * base.coverage.txt juntos. Eu tenho algo escrito, mas não é certo, já que não acho que estou colando-os juntos.

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

Eu também estou pensando em um método de loop diferente, mas não tenho certeza de como obter 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

    
por awall 11.04.2012 / 14:24

3 respostas

0

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' \;
    
por 11.04.2012 / 14:39
1

Tente isto:

find . -type f -name '*.base.coverage.txt' \
  | xargs paste > paste_all_l30.p90.base.cov.norm

Isso funcionará enquanto não houver muitos arquivos. Se houver muitos arquivos, então:

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
    
por 11.04.2012 / 14:41
0

A melhor maneira de recorrer a vários diretórios seria escrever um script python curto e usar a função os.path.walk para recursar nos diretórios aninhados. Para acrescentar, você pode usar shutil.copyfileobj dentro do loop, verificando nomes de arquivos com uma expressão regular.

    
por 12.04.2012 / 09:19