Gostaria de renomear meus arquivos usando Bash, removendo 4 caracteres do meio.
Nomes de arquivos originais:
dwe_hiul123456.pdf
dwe_lkyd345876.pdf
dwe_ythn157843.pdf
Quero remover as 4 letras do meio para que os novos nomes dos arquivos sejam:
dwe_123456.pdf
dwe_345876.pdf
dwe_157843.pdf
As 4 letras sempre seguirão _
e sempre haverá uma _
no nome do arquivo. Todos os nomes de arquivos têm o mesmo comprimento e os quatro caracteres que desejo remover estão no mesmo lugar.
Sou realmente novo nisso e não sei qual versão de qualquer coisa que estou usando, exceto o Windows 10. Eu estava tentando fazer isso por meio da janela de comando do Git Bash.
Responder1
Se você tiver perl-rename (disponível rename
em sistemas baseados em Debian, perl-rename
em outros), você pode fazer:
$ rename -n 's/_..../_/' *pdf
dwe_hiul123456.pdf -> dwe_123456.pdf
dwe_lkyd345876.pdf -> dwe_345876.pdf
dwe_ythn157843.pdf -> dwe_157843.pdf
As -n
causas rename
para imprimir apenas o que faria sem fazer nenhuma alteração. Depois de confirmar que funciona como desejado, remova -n
e execute o comando novamente para renomear os arquivos:
rename 's/_..../_/' *pdf
Se você não puder usar rename
por algum motivo, você também pode fazer isso com um simples loop de shell:
for file in *pdf; do
echo mv -- "$file" "${file/_????/_}"
done
Mais uma vez, se você tiver certeza de que isso fará o que deseja, remova o echo
para renomear os comandos:
for file in *pdf; do
mv -- "$file" "${file/_????/_}"
done
Responder2
Usandoexpansão de parâmetros:
$ for i in *.pdf; do
echo mv -- "$i" "${i/_[a-z][a-z][a-z][a-z]/_}"
# actual `mv` command
# mv -- "$i" "${i/_[a-z][a-z][a-z][a-z]/_}"
done
mv -- dwe_hiul123456.pdf dwe_123456.pdf
mv -- dwe_lkyd345876.pdf dwe_345876.pdf
mv -- dwe_ythn157843.pdf dwe_157843.pdf
Se você estiver satisfeito com o echo
resultado, remova-o para realmente executar o comando.