Domine o `rename`: Renomeie arquivos no Linux com facilidade!

Liberte-se da tarefa árdua de renomear arquivos no Linux com uma ferramenta mais eficiente. Simplifique o processo de renomeação, tornando-o mais rápido e intuitivo. Este guia apresenta um comando poderoso que vai revolucionar a forma como você lida com seus arquivos.

Por que evitar o comando `mv` para renomear?

O comando `mv` é uma ferramenta básica e eficaz para mover arquivos, presente em todas as distribuições Linux, macOS e sistemas do tipo Unix. Contudo, seu propósito principal é mover arquivos, não renomeá-los. A renomeação é apenas um efeito colateral do movimento de um arquivo para um novo local com um nome diferente. Embora funcione para arquivos únicos, não é a solução ideal para renomeações em massa.

Renomear um único arquivo usando `mv`

Para renomear um arquivo com `mv`, basta digitar `mv`, o nome original do arquivo, um espaço e o novo nome desejado. Por exemplo:

mv arquivo_antigo.txt arquivo_novo.txt

O comando `ls` confirma a alteração:

ls *.txt

Renomear vários arquivos com `mv`

Renomear vários arquivos com `mv` torna-se rapidamente complexo. `mv` não tem recursos nativos para renomeação múltipla, exigindo o uso de scripts Bash avançados. Embora funcional, a complexidade contrasta com a simplicidade de renomear um único arquivo.

Imagine um diretório com diversos arquivos, alguns com a extensão `.prog`. Queremos substituir essa extensão por `.prg`. Veja como realizar essa tarefa com `mv`:

ls *.prog -l

A solução sem um script Bash é:

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"

A verificação demonstra a eficácia do comando:

ls *.pr*

O que este comando fez?

Este comando cria um loop que processa cada arquivo com a extensão `.prog`. Para cada arquivo, o comando `mv` o move para um novo arquivo com a extensão substituída por `.prg`.

Existe uma maneira mais simples?

Sim! O comando `rename` foi criado para isso. No entanto, ele não vem instalado por padrão na maioria das distribuições Linux. O nome exato do comando pode variar dependendo da sua distribuição, mas a funcionalidade permanece a mesma.

Em distribuições baseadas em Ubuntu e Debian, a instalação é feita com:

sudo apt-get install rename

Para distribuições baseadas em Fedora e RedHat, instale o `prename`:

sudo dnf install prename

No Manjaro Linux, use o `perl-rename`:

sudo pacman -Syu perl-rename

Renomeando com `rename`

Vamos retornar os arquivos para a extensão original `.prog` e usar o comando `rename`:

ls *.prog

O comando para substituir a extensão e sua verificação:

rename 's/.prog/.prg/' *.prog
ls *.pr*

Todos os arquivos agora têm a extensão `.prg`.

O que aconteceu?

O comando é composto por três partes. Primeiro, o nome do comando (`rename`, `prename` ou `perl-rename`). Segundo, o padrão de substituição dentro de aspas simples. Terceiro, os arquivos em que a substituição deve ser aplicada.

A parte central, `s/.prog/.prg/`, usa expressões regulares para localizar e substituir partes dos nomes dos arquivos. `s` indica substituição; o primeiro termo `.prog` é o que será procurado; o segundo termo `.prg` é o que irá substituir o encontrado.

Modificando outras partes dos nomes de arquivos

Vamos modificar os prefixos dos arquivos C. Primeiro, verificamos os arquivos:

ls sl*.c

Substituímos o prefixo `slang_` por `sl_`:

rename 's/slang_/sl_/' *.c

Verificando o resultado:

ls sl*.c

Removendo partes dos nomes de arquivos

Para remover o prefixo `sl_`, vamos usar o comando:

ls *.c
rename 's/sl_//' *.c
ls *.c

O termo de substituição está vazio, o que efetivamente remove o termo de pesquisa.

Limitando alterações a partes específicas dos nomes de arquivos

Vamos usar `ls` para encontrar arquivos com a string `param` e depois renomeá-los:

ls *param*
rename 's/param/parameter/' *.c
ls *param*

A string `param` foi substituída por `parameter` em todos os arquivos, independentemente da posição da string no nome.

Usando metacaracteres do Perl, podemos refinar o comando. `^` indica o início de uma string, e `$` indica o final.

ls *param*.c
rename 's/^parameter/value/' *.c
ls *param*.c
ls value*.c

Agora, apenas arquivos que começam com `parameter` foram renomeados para `value`.

Pesquisando com agrupamentos

O agrupamento permite procurar por várias strings similares. Por exemplo:

ls str*.c
rename 's/(stri|stra)ng/bang/' *.c
ls ban*.c

Strings com `string` ou `strang` foram substituídas por `bang`.

Usando traduções com `rename`

O comando `rename` também realiza traduções, como converter arquivos para maiúsculas:

rename ‘y/az/AZ/’ *.prg

ls *.PRG

Para reverter para minúsculas:

rename ‘y/AZ/az/’ *.PRG

ls *.prg

Conclusão

Com o comando `rename` e suas expressões regulares poderosas, você ganha flexibilidade e simplicidade no processo de renomear arquivos. Embora aprender Perl seja valioso, você pode obter grandes benefícios usando apenas o básico do `rename`.