Excluindo certas palavras do nome do arquivo

1

Eu tenho um conjunto de arquivos que, quando processados em meu software, são exibidos com um nome diferente (denotando que ele concluiu com êxito o processo).

Por exemplo, o arquivo de entrada pode ler SAM111_tsta.fastq e sair como SAM111_tstaAligned.SortbyCoord.bam.

Eu estou querendo saber, se existe uma maneira (via linha de comando) para vasculhar um diretório recursivamente e localizar todos os arquivos que têm 'Aligned.SortbyCoord.bam "e ter apenas' Aligned.SortbyCoord 'removido para que eu acabe com 'SAM111_tsta.bam?

    
por ozarka 15.02.2016 / 20:38

3 respostas

0

Se você se encontrar parecido com este . Você deveria ser capaz de fazer algo como:

find dir -name '*_tstaAligned.SortbyCoord.bam' -exec bash -c 'mv "$0" "${0/_tstaAligned.SortbyCoord.bam/_tsta.bam}"' "{}" \;

Embora o bash ${var//find_all/substitute_with_this} seja usado, você só corresponderá aos arquivos que terminam com _tstaAligned.SortbyCoord.bam , pois esse é o padrão dado a find . Você, no entanto, substituirá todas as ocorrências de _tstaAligned.SortbyCoord.bam no nome, se houver algum arquivo com vários. (Acho que não.)

Para testes, faça algo como:

find dir -name '*tstaAligned.SortbyCoord.bam' -exec bash -c 'printf "mv \"%s\" \"%s\"\n" "$0" "${0/_tstaAligned.SortbyCoord.bam/_tsta.bam}"' "{}" \;
    
por 15.02.2016 / 22:16
0

Existe o comando rename,

find -name '*Aligned.SortbyCoord.bam' -exec rename Aligned.SortbyCoord '' + \;

o que acontece é em util-linux para você d tem que instalá-lo, o pacote tem algumas coisas boas nele.

Ou você pode arrumar uma lista simples com

find -name '*Aligned.SortbyCoord.bam' \
| sed -E 's/(.*)Aligned.*/mv "&" ".bam"/e'

se o sed for novo o suficiente ou

find -name '*Aligned.SortbyCoord.bam' \
| sed -E 's/(.*)Aligned.*/mv "&" ".bam"/' \
| sh -x

se não for, ou você pode fazer uma função de shell rápida para fazer isso,

doit () { while read; do mv "$REPLY" "${REPLY%Aligned*}.bam"; done; }
find -name '*Aligned.SortbyCoord.bam' | doit

ou como um oneliner

find -name '*Aligned.SortbyCoord.bam' | while read f; do mv "$f" "${f%A*}.bam"; done
    
por 15.02.2016 / 23:11
0

Execute o comando abaixo no diretório em que você suspeita que os arquivos indesejados estão presentes:

Encontre. -iname " Aligned.SortbyCoord.bam " | xargs rm -f

Eu recomendo executar o comando find primeiro para validar os arquivos necessários que saem como saída e, em seguida, excluí-los usando xargs rm -f.

    
por 16.02.2016 / 04:39

Tags