Excluindo certas palavras do nome do arquivo

Excluindo certas palavras do nome do arquivo

Eu tenho um conjunto de arquivos que, quando processados ​​em meu software, saem com um nome diferente (denotando que o processo foi concluído com êxito).

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

Estou me perguntando se existe uma maneira (via linha de comando) de vasculhar um diretório recursivamente e localizar todos os arquivos que possuem 'Aligned.SortbyCoord.bam' e apenas 'Aligned.SortbyCoord' removido para que eu acabe com 'SAM111_tsta .bam?

Responder1

Se você achar parecidoesse. Você deve 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ê corresponderá apenas aos arquivos que terminam com, _tstaAligned.SortbyCoord.bampois esse é o padrão fornecido para find. No entanto, você substituiria todas as ocorrências de _tstaAligned.SortbyCoord.bamno nome, se algum arquivo tiver várias. (Improvável, eu acho.)

Para testar 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}"' "{}" \;

Responder2

Existe o comando renomear,

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

que acontece que está emutilitário-linuxentão você teria que instalá-lo, o pacote contém algumas coisas legais.

Ou você pode criar uma lista simples com

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

se o seu sed for novo o suficiente, ou

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

se não estiver, ou você pode criar 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 oneliner

find -name '*Aligned.SortbyCoord.bam' | while read f; do mv "$f" "${f%A*}.bam"; done

Responder3

Execute o comando abaixo no diretório onde você suspeita que os arquivos indesejados estejam presentes:

Encontrar . -iname "Alinhado.SortbyCoord.bam" | xargs rm -f

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

informação relacionada