Dê uma olhada no comando renomear: rename .xxx .yyy *.xxx
Eu tenho um diretório cheio de arquivos que terminam em .xxx. ( Apple.xxx , Orange.xxx , Bannana.xxx )
Eu quero mudar suas extensões para .yyy. ( Apple.yyy , Orange.yyy , Bannana.yyy )
Qual é a maneira mais rápida de fazer isso usando comandos básicos do shell?
for i in *.xxx; do
mv "$i" "${i%.*}.yyy"
done
O sinal de porcentagem em "$ {i%. *}" significa usar o padrão glob após o sinal de porcentagem, aplicá-lo ao valor da variável i e remover o menor possível corresponder a partir do final daquele valor. Isso é chamado de expansão Parâmetro / Variável e tem muitos usos. Você também pode fazer com que a glob seja a correspondência mais longa possível ou fazer a correspondência glob desde o início também. Este artigo do Linux Journal é sobre expansão de parâmetros.
É colocado entre aspas duplas de modo que, se houver espaços no nome do arquivo e a variável IFS for definida para incluir espaços (a norma), o nome do arquivo ainda será passado para mv como um argumento.
Instale mmv e faça isso:
mmv -r "*.xxx" "#1.yyy"
Já temos várias respostas, mas adicionarei as minhas próprias.
for i in *.xxx; do
mv "$i" "'basename $i .xxx'.yyy"
done