Linux: Como mudar a extensão de um monte de arquivos?

4

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?

    
por Runcible 23.07.2009 / 23:20

4 respostas

14

Dê uma olhada no comando renomear: rename .xxx .yyy *.xxx

    
por 23.07.2009 / 23:25
7
 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.

    
por 23.07.2009 / 23:27
3

Instale mmv e faça isso:

mmv -r "*.xxx" "#1.yyy"
    
por 23.07.2009 / 23:29
1

Já temos várias respostas, mas adicionarei as minhas próprias.

for i in *.xxx; do
    mv "$i" "'basename $i .xxx'.yyy"
done
    
por 24.07.2009 / 09:02