Como posso alterar todos os prefixos de arquivos em um comando?

7

Eu preciso alterar os postfixes de todos os arquivos (todos iguais .JPEG) para .jpeg (maiúsculas vs. minúsculas).
Existe uma maneira rápida de fazer isso?

    
por Itay Moav -Malimovka 11.06.2011 / 22:49

7 respostas

14

Use o programa Perl rename , que é instalado por padrão:

rename 's/\.JPEG$/.jpeg/' *.JPEG

O primeiro argumento é um nome de arquivo de correspondência de expressão regular Perl que termina com .JPEG e o substitui por .jpeg .

O segundo argumento seleciona os arquivos que devem ser correspondidos, no seu caso, todos os arquivos no diretório atual que terminam em .JPEG . Você poderia especificar um local diferente, é claro:

rename 's/\.JPEG$/.jpeg/' ~/Pictures/*.JPEG

Outras respostas que vi:

  • rename s/.JPEG$/.jpeg/ * - isso também renomeia arquivos como StupidJPEG to Stupi.jpeg porque o ponto é compatível com qualquer caractere. .JPEG$ é uma expressão regular
  • rename 's/\.JPEG$/\.jpeg/' * - funciona, mas é menos eficiente porque passa todos os arquivos no diretório atual para rename .
  • rename -n 's/.JPEG$/.jpeg/' *.JPEG - a opção -n mostraria os arquivos que estão sendo renomeados, sem realmente renomeá-los ("execução a seco"). Como *.JPEG corresponde a arquivos pós-fixados com .JPEG , o problema de correspondência de pontos é inexistente aqui.
por Lekensteyn 11.06.2011 / 22:51
3

Existe uma ferramenta para isso:

sudo apt-get install renameutils ou clique em renameutils

(se ainda não estiver instalado)

onde você pode fazer (a partir da linha de comando):

rename s/\.JPEG$/\.jpeg/ *.JPEG

    
por Rinzwind 11.06.2011 / 22:55
2

Encontrei um segundo após postar:

rename 's/\.JPEG$/.jpeg/' *
    
por Itay Moav -Malimovka 11.06.2011 / 22:52
2

Embora essa não seja a melhor solução para esse caso de uso específico,

for i in *.JPEG; do mv "$i" "$(basename "$i" .JPEG).jpeg"; done

também funciona. Podemos fazer alguns truques com o bash para aumentar um pouco a eficiência (evitando invocação de um subprocesso adicional no loop interno), terminando com:

for i in *.JPEG; do mv "$i" "${i%%.JPEG}.jpeg"; done

Esta solução é mais útil se você quiser fazer outra coisa em additon para renomear os arquivos, como registrar quais nomes foram alterados, ou mesmo fazer uma execução a seco para garantir que ele faça o que você quer.

    
por crazy2be 13.06.2011 / 01:09
1

Use o comando renomear. É diferente de mover e muitas vezes é causa de confusão porque foi especificamente criado com renomeação de imagem em mente.

Algo como este comando deve funcionar (para todos os arquivos que terminam em .JPEG, altere .JPEG para .jpeg)

renomeie -n 's / .JPEG $ /. jpeg /' * .JPEG

    
por tgm4883 11.06.2011 / 22:54
1

Fazer coisas em paralelo está ficando cada vez mais importante, por isso recomendo:

parallel mv {} {.}.jpg ::: *.JPG

Este utilitário não é instalado por padrão.

    
por Sebastian 12.06.2011 / 10:50
0

Se você está procurando uma boa solução gráfica e não quer se preocupar com argumentos complicados de linha de comando, existe um ótimo script Nautilus disponível para renomear arquivos. Tem uma interface simples e muitas opções.

Disponível aqui: link

    
por MarkovCh1 21.06.2011 / 02:23