Eu também gosto do comando rename que John T postou, mas não está disponível em todos os sistemas. Isso deve funcionar em todos os lugares:
for i in *.png; do mv -v $i 'basename $i .png'.test.png; done
Gostaria de renomear todos os arquivos de uma pasta usando um regex (adicionar um nome ao final do nome) e ir para outra pasta.
Na minha opinião, deveria estar assim:
mv -v ./images/*.png ./test/*test.png
, mas não está funcionando.
Alguém pode me sugerir uma solução?
Existe um prático script de renomeação de arquivos perl que é instalado com o pacote Perl principal em sistemas baseados em Debian (incluindo o Ubuntu). Geralmente é denominado rename
, mas às vezes é chamado de prename
(renomeação de Perl). Use assim:
rename expr file1 file2 file3
O comando usa Perl para avaliar expr
para cada argumento file
e renomeia cada arquivo para a saída da expr
evalutation. Então, para substituições de regex simples, como seu exemplo:
rename 's(images/(.*)\.png$)(test/$1.test.png)' ./images/*
# here's the expression:
# s()() -- just like s/// (but i don't need to escape the / in the filename)
# match regex: images/(.*)\.png$ -- match filenames of the form images/*.png
# replace: test/$1.test.png -- turn them into test/*.test.png
Se os arquivos não corresponderem à expressão (por exemplo, arquivos não-PNG), a substituição não fará nada e seus nomes de arquivo não serão alterados.
Você pode usar rename
, que aceita expressões regulares ou esta sintaxe básica de 3 argumentos:
rename .png .test.png *.png