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`.