Comando rename: Renomeando Arquivos em Massa

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 -n antes 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 rename padrao 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.

Lina: Senpai, eu tenho 50 arquivos como photo1.jpeg, photo2.jpeg... e quero mudar cada extensao para .jpg. Tenho que corrigir um por um com mv?
Veterano Linny: Fazer tudo isso manualmente seria doloroso. Quando voce quer aplicar a mesma mudanca de nome a muitos arquivos de uma vez, e exatamente para isso que o rename serve. Se mv e "uma ferramenta para renomear um arquivo," entao rename e "uma ferramenta para renomear muitos arquivos de uma vez."
Lina: Entao eu nao preciso digitar mv 50 vezes?
Veterano Linny: Isso. Um comando renomeia todos os 50. E voce pode especificar um padrao como "substituir apenas a parte .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.

Lina: Eu ja consigo renomear com mv, certo? Por que me preocupar em aprender rename?
Veterano Linny: Boa pergunta. Para renomear um unico arquivo, como 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.
Lina: Isso realmente nao e pratico...
Veterano Linny: Com 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)
Lina: Apareceu rename(photo1.jpeg, photo1.jpg), mas os arquivos nao mudaram de verdade?
Veterano Linny: Correto. Enquanto -n estiver ativo, nada mudou. E uma visualizacao que diz "se voce executasse isso, aqui esta o que mudaria." Mostra como rename(antes, depois).
Lina: Entao ele me mostra o plano primeiro. Isso e tranquilizador.
Veterano Linny: Quando a saida parecer correta, remova -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

  1. rename -n 'regra' alvos para verificar o plano
  2. Se a saida estiver correta, remova -n e execute
  3. Se tiver duvida, adicione -v para 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/' *
Lina: O que e o s no inicio de s/jpeg/jpg/? Esta separado por barras.
Veterano Linny: O 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/.
Lina: Tambem vejo ^ e $. O que sao esses?
Veterano Linny: Sao marcadores de posicao. ^ 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/' *
Lina: Tenho arquivos como IMG_001.JPG com maiusculas misturadas, e quero todos em minusculas.
Veterano Linny: Entao 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.
Lina: Isso e diferente de s///?
Veterano Linny: 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.

Lina: Pesquisei online e encontrei exemplos escritos sem barras, como rename .jpeg .jpg *.jpeg. Qual esta correto?
Veterano Linny: Ambos estao corretos, mas sao comandos rename diferentes. Existem principalmente dois tipos no mundo.
Lina: O mesmo nome mas internos diferentes...?
Veterano Linny: Isso. Entao a primeira coisa a fazer e confirmar qual voce tem. Execute 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

Lina: Executei rename 's/jpeg/jpg/' *.jpeg mas nada mudou.
Veterano Linny: Voce provavelmente esta na versao util-linux do rename. Ela nao entende o regex 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.

Lina: Quero experimentar na pratica. Mas tenho medo de quebrar arquivos reais...
Veterano Linny: Por isso vamos criar arquivos vazios de pratica. Com 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

Proximas Leituras