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.bam
pois esse é o padrão fornecido para find
. No entanto, você substituiria todas as ocorrências de _tstaAligned.SortbyCoord.bam
no 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.