Como você renomeia vários arquivos removendo 4 caracteres no meio que são diferentes em cada nome de arquivo, mas no mesmo local?

Como você renomeia vários arquivos removendo 4 caracteres no meio que são diferentes em cada nome de arquivo, mas no mesmo local?

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 renameem sistemas baseados em Debian, perl-renameem 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 -ncausas renamepara imprimir apenas o que faria sem fazer nenhuma alteração. Depois de confirmar que funciona como desejado, remova -ne execute o comando novamente para renomear os arquivos:

rename 's/_..../_/' *pdf

Se você não puder usar renamepor 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 echopara 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 echoresultado, remova-o para realmente executar o comando.

informação relacionada