Comando rename: Renomeando Arquivos em Massa
O Que Voce Vai Aprender
- Como renomear muitos arquivos de uma vez com um unico comando
- O habito seguro de visualizar mudancas com
-nantes de qualquer renomeacao - Como a substituicao
s/antigo/novo/troca extensoes ou texto em massa - Como distinguir os dois comandos rename diferentes (Perl vs util-linux)
Resumo Rapido (os padroes para memorizar primeiro)
- Visualizar primeiro -->
rename -n 's/antigo/novo/' *(mostra o plano, nao muda nada) - Depois executar -->
rename 's/antigo/novo/' * - Maiusculas para minusculas -->
rename 'y/A-Z/a-z/' * - Nao sabe qual rename voce tem -->
rename --version
Premissas (ambiente alvo)
- SO: Ubuntu / Debian (o
renamepadrao e a versao Perl) - Em outras distros (Fedora, etc.) voce pode ter a versao util-linux com sintaxe diferente (coberta na Secao 6)
1. O Que E o Comando rename?
Conclusao: rename muda os nomes de muitos arquivos de uma vez usando um padrao, eliminando a necessidade de executar mv um arquivo por vez.
photo1.jpeg, photo2.jpeg... e quero mudar cada extensao para .jpg. Tenho que corrigir um por um com mv?rename serve. Se mv e "uma ferramenta para renomear um arquivo," entao rename e "uma ferramenta para renomear muitos arquivos de uma vez."mv 50 vezes?.jpeg por .jpg," que e sua verdadeira forca.A ideia basica do rename
rename 's/jpeg/jpg/' *.jpeg
↑ ↑
| arquivos alvo (aqui, todo .jpeg)
regra (substituir jpeg por jpg)Ele encontra jpeg em cada nome de arquivo e reescreve para jpg, em todos os arquivos alvo de uma vez.
2. Por Que Usar rename?
Conclusao: mv e suficiente para um arquivo, mas ineficiente para dezenas sob a mesma regra. rename permite escrever o padrao uma vez.
mv, certo? Por que me preocupar em aprender rename?mv old.txt new.txt, mv e suficiente. O problema e quando voce quer mudar 100 arquivos pela mesma regra. Com mv voce teria que digitar o comando 100 vezes.rename voce escreve a regra uma vez e ela se aplica a tudo. Tarefas como "adicionar 2026_ no inicio de cada nome" ou "transformar espacos em underscores" terminam em um unico comando, com menos erros de digitacao.Renomear arquivos e dificil de desfazer. Digitar mv 50 vezes convida erros de digitacao. Concentrar o trabalho em uma unica regra rename significa que ha apenas uma coisa para verificar, o que na verdade e mais seguro. Mas uma regra errada pode quebrar todos os 50 arquivos de uma vez, entao a visualizacao com -n na proxima secao e essencial.
3. Sempre Visualize Com -n Primeiro (o habito essencial)
Conclusao: Sempre execute rename com -n primeiro para ver exatamente o que mudaria, depois remova -n para aplicar de verdade.
A coisa mais importante com rename e nunca executar as cegas. Adicione -n (--nono, o modo "sem acao") primeiro para exibir apenas o plano de mudancas.
$ rename -n 's/jpeg/jpg/' *.jpeg
rename(photo1.jpeg, photo1.jpg) rename(photo2.jpeg, photo2.jpg) rename(photo3.jpeg, photo3.jpg)
rename(photo1.jpeg, photo1.jpg), mas os arquivos nao mudaram de verdade?-n estiver ativo, nada mudou. E uma visualizacao que diz "se voce executasse isso, aqui esta o que mudaria." Mostra como rename(antes, depois).-n e execute o mesmo comando novamente. Ai e quando a renomeacao realmente acontece.Quando o plano parecer correto, remova -n para executar de verdade.
$ rename 's/jpeg/jpg/' *.jpeg
Agora os arquivos estao realmente renomeados. Adicione -v (--verbose) para imprimir os nomes que foram mudados.
$ rename -v 's/jpeg/jpg/' *.jpeg
photo1.jpeg renamed as photo1.jpg photo2.jpeg renamed as photo2.jpg
A regra de ouro
rename -n 'regra' alvospara verificar o plano- Se a saida estiver correta, remova
-ne execute - Se tiver duvida, adicione
-vpara ver o resultado tambem
Mantenha sempre esse habito de dois passos "visualizar depois executar".
4. Substituindo Texto Com s///
Conclusao: 's/antes/depois/' e a forma mais comum. Substitui texto dentro dos nomes de arquivo por outro texto.
O rename do Ubuntu (versao Perl) recebe uma regra de substituicao como 's/antigo/novo/'. Essa e a sintaxe de substituicao do Perl, onde s significa substitute.
# Mudar extensao .jpeg para .jpg $ rename -n 's/jpeg/jpg/' *.jpeg # Mudar "draft" para "final" nos nomes $ rename -n 's/draft/final/' * # Adicionar "2026_" no inicio (^ significa inicio do nome) $ rename -n 's/^/2026_/' * # Adicionar ".bak" no final ($ significa fim do nome) $ rename -n 's/$/.bak/' *
s no inicio de s/jpeg/jpg/? Esta separado por barras.s e o sinal de "substitute" (substituir). s/A/B/ significa "encontre A e substitua por B." As barras / sao separadores. Basta lembrar s/antes/depois/.^ e $. O que sao esses?^ e "o inicio do nome" e $ e "o final do nome." Entao s/^/2026_/ significa "adicionar 2026_ na frente," e s/$/.bak/ significa "adicionar .bak no final." Nao pense demais no inicio; esses dois padroes sao suficientes.Padroes comuns de substituicao
| O que voce quer | Regra |
|---|---|
| Mudar a extensao | s/jpeg/jpg/ |
| Trocar uma string | s/draft/final/ |
| Adicionar texto no inicio | s/^/prefix_/ |
| Adicionar texto no final | s/$/_suffix/ |
| Deletar uma string | s/_copy// |
Deixar a substituicao vazia (//) significa "deletar essa string."
5. Normalizando Maiusculas/Minusculas Com y///
Conclusao: 'y/A-Z/a-z/' converte maiusculas para minusculas em massa. Mapeia caracteres um a um.
Para deixar nomes de arquivo em minusculo, use 'y/A-Z/a-z/'. Aqui y e uma traducao no nivel de caractere (transliterate).
# Tornar todas as letras maiusculas em minusculas $ rename -n 'y/A-Z/a-z/' * # Tornar todas as letras minusculas em maiusculas $ rename -n 'y/a-z/A-Z/' *
IMG_001.JPG com maiusculas misturadas, e quero todos em minusculas.y/A-Z/a-z/ e perfeito. Ele substitui cada A-Z (maiuscula A ate Z) pelo correspondente a-z (minuscula a ate z), um caractere por vez. IMG_001.JPG vira img_001.jpg.s///?s/// substitui um "bloco de texto." y/// substitui "um caractere por vez" usando uma tabela de mapeamento. Quando voce quer mudar uma classe inteira de caracteres, como maiusculas para minusculas, y/// e a opcao certa.Se dois arquivos diferem apenas em maiusculas/minusculas (File.txt e file.txt) e voce os converte para o mesmo nome, um pode ser sobrescrito e perdido. Sempre verifique o plano com -n antes de usar y/// tambem.
6. Cuidado Com Dois Comandos rename Diferentes (Perl vs util-linux)
Conclusao: Existem dois comandos diferentes ambos chamados rename, com sintaxe diferente. Execute rename --version para ver qual voce tem. O padrao do Ubuntu e a versao Perl.
Na verdade existem dois comandos com o mesmo nome mas internos diferentes. Esse e o maior ponto de confusao para iniciantes.
rename .jpeg .jpg *.jpeg. Qual esta correto?rename --version e voce sabera.$ rename --version
Para a versao Perl (padrao Ubuntu / Debian), voce vera algo como File::Rename.
/usr/bin/rename using File::Rename version 1.xx
Para a versao util-linux, voce vera as palavras util-linux.
rename from util-linux 2.xx
Os dois comandos rename
| Item | Versao Perl (file-rename) | Versao util-linux |
|---|---|---|
| Comum em | Ubuntu / Debian | Fedora / RHEL, etc. |
| Sintaxe | rename 's/A/B/' * |
rename A B arquivos |
| Padroes | Regex Perl completa | Substituicao simples |
| Dry-run | -n |
-n |
Este artigo assume a versao Perl (padrao Ubuntu). Na versao util-linux, a mesma mudanca .jpeg --> .jpg fica assim:
Se voce esta na versao util-linux, a mesma operacao fica assim.
# util-linux version: rename DE PARA arquivos-alvo $ rename .jpeg .jpg *.jpeg
Se a versao Perl nao estiver instalada no Ubuntu, voce pode adiciona-la com sudo apt install rename (a instalacao requer privilegios de administrador). De qualquer forma, verifique rename --version primeiro.
7. Armadilhas Comuns para Iniciantes
Conclusao: Executar sem -n, mirar em muitos arquivos e confundir as versoes Perl e util-linux sao os tres erros mais comuns.
7-1. Executar sem -n
# Ruim: executar imediatamente sem verificacao (uma regra errada atinge tudo) $ rename 's/a/b/' * # Bom: visualizar com -n primeiro $ rename -n 's/a/b/' *
Renomear e dificil de desfazer. Sempre olhe o plano com -n antes de executar de verdade. Isso sozinho previne a maioria dos acidentes.
7-2. Mirar em muitos arquivos
# Arriscado: todo arquivo no diretorio atual e alvo $ rename -n 's/o/0/' * # Seguro: restringir o alvo a .txt $ rename -n 's/o/0/' *.txt
* corresponde a todo arquivo no diretorio atual. Restrinja o alcance com algo como *.txt para que arquivos nao intencionais nao sejam pegos.
7-3. Usar a versao util-linux esperando a versao Perl
rename 's/jpeg/jpg/' *.jpeg mas nada mudou.s/.../.../. Verifique com rename --version, e se for util-linux, mude para a forma rename .jpeg .jpg *.jpeg.8. Mini Exercicios: Tente Voce Mesmo
Conclusao: Crie arquivos de pratica, depois tente substituicao, prefixo e conversao para minusculas em tres exercicios, cada um com -n.
touch eles nao tem conteudo, entao nao importa se quebrarem. Vamos fazer uma pasta de trabalho e experimentar.Configure arquivos de pratica.
$ mkdir rename-practice && cd rename-practice $ touch photo1.JPEG photo2.JPEG report_draft.txt
Exercicio 1: Visualize (com -n) a mudanca de .JPEG para .jpg.
Mostrar dica
Use a forma rename -n 's/antes/depois/' alvos. Substitua a extensao .JPEG por .jpg.
Resposta exemplo
$ rename -n 's/JPEG/jpg/' *.JPEG
Funciona se o plano mostrar linhas como rename(photo1.JPEG, photo1.jpg).
Exercicio 2: Mude draft para final em report_draft.txt e realmente renomeie (visualize com -n primeiro).
Mostrar dica
Verifique com -n primeiro, depois remova -n se parecer correto.
Resposta exemplo
$ rename -n 's/draft/final/' report_draft.txt $ rename 's/draft/final/' report_draft.txt
Funciona se virar report_final.txt.
Exercicio 3: Torne todos os nomes de arquivo restantes em minusculas.
Mostrar dica
Traducao no nivel de caractere e y/A-Z/a-z/.
Resposta exemplo
$ rename -n 'y/A-Z/a-z/' * $ rename 'y/A-Z/a-z/' *
9. Modelos para Copiar e Colar
Conclusao: Mantenha a mao as formas comuns para visualizar, substituir, prefixo/sufixo, converter para minusculas e verificar a versao.
Formas comuns (versao Perl assumida)
# Visualizar o plano primeiro (mais importante) rename -n 's/old/new/' * # Executar de verdade apos verificar rename 's/old/new/' * # Mudar uma extensao rename -n 's/jpeg/jpg/' *.jpeg # Adicionar texto no inicio rename -n 's/^/2026_/' * # Adicionar texto no final rename -n 's/$/.bak/' * # Deletar uma string rename -n 's/_copy//' * # Normalizar maiusculas para minusculas rename -n 'y/A-Z/a-z/' * # Verificar qual rename voce tem rename --version