Pesquisa de site

Renomear – uma ferramenta de linha de comando para renomear vários arquivos no Linux


Freqüentemente usamos o comando “mv” para renomear um único arquivo no Linux. No entanto, renomear vários ou grupos de arquivos rapidamente torna a tarefa muito difícil em um terminal.

O Linux vem com uma ferramenta integrada muito poderosa chamada renomear. O comando rename é usado para renomear vários ou grupos de arquivos, renomear arquivos para letras minúsculas, renomear arquivos para letras maiúsculas e sobrescrever arquivos usando expressões perl.

O comando “rename” faz parte do script Perl e reside em “/usr/bin/” em muitas distribuições Linux. Você pode executar o comando “qual” para descobrir a localização do comando renomear.

which rename
/usr/bin/rename
A sintaxe básica do comando renomear
rename 's/old-name/new-name/' files

O comando rename vem com alguns argumentos opcionais junto com a expressão perl obrigatória que orienta o comando rename para fazer o trabalho real.

rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
  1. -v: Imprime nomes de arquivos renomeados com sucesso.
  2. -n: Mostra quais arquivos seriam renomeados.
  3. -f: Força a substituição dos arquivos existentes.
  4. perlexpr: Expressão Perl.

Para melhor compreensão deste utilitário, discutimos alguns exemplos práticos deste comando no artigo.

1. Um exemplo básico de comando de renomeação

Suponha que você tenha vários arquivos com extensão “.html” e queira renomear todos os arquivos “.html” para “.php” de uma só vez. Por exemplo, primeiro faça um “ls -l” para verificar a lista de arquivos com extensão “.html”.

ravisaive@tecmint:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html
-rw-rw-r-- 1 ravisaive ravisaive  588895 Oct 10 12:10 entertainment.html
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html
-rw-rw-r-- 1 ravisaive ravisaive  938895 Oct 10 12:10 news.html
-rw-rw-r-- 1 ravisaive ravisaive  938937 Oct 10 12:11 photos.html
-rw-rw-r-- 1 ravisaive ravisaive  978137 Oct 10 12:11 sports.html

Agora, você deseja alterar a extensão de todos esses arquivos de “.html” para “.php“. Você pode usar o seguinte comando “renomear” com expressão perl conforme mostrado abaixo.

ravisaive@tecmint:~$ rename 's/\.html$/\.php/' *.html

Nota: No comando acima usamos dois argumentos.

  1. O primeiro argumento é uma expressão perl que substitui .html por .php.
  2. O segundo argumento diz ao comando rename para substituir todos os arquivos por *.php.

Vamos verificar se todos os arquivos foram renomeados para a extensão “.php”, fazendo ls -l no prompt.

ravisaive@tecmint:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.php
-rw-rw-r-- 1 ravisaive ravisaive  588895 Oct 10 12:10 entertainment.php
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.php
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.php
-rw-rw-r-- 1 ravisaive ravisaive  938895 Oct 10 12:10 news.php
-rw-rw-r-- 1 ravisaive ravisaive  938937 Oct 10 12:11 photos.php
-rw-rw-r-- 1 ravisaive ravisaive  978137 Oct 10 12:11 sports.php

Agora você pode ver acima que todos os arquivos html foram renomeados para php.

2. Verifique as alterações antes de executar o comando Renomear

Ao realizar tarefas críticas ou importantes de renomeação, você sempre pode verificar as alterações executando o comando rename com o argumento “-n”. O parâmetro “-n” lhe dirá exatamente quais mudanças ocorreriam, mas as mudanças não são feitas de verdade. Aqui está o exemplo do comando abaixo.

ravisaive@tecmint:~$ rename -n 's/\.php$/\.html/' *.php

cricket.php renamed as cricket.html
entertainment.php renamed as entertainment.html
health.php renamed as health.html
lifestyle.php renamed as lifestyle.html
news.php renamed as news.html
photos.php renamed as photos.html
sports.php renamed as sports.html

Nota: A saída do comando acima apenas exibe alterações, mas na verdade as alterações não são feitas, a menos que você execute o comando sem a opção “-n”.

3. Imprimir saída de renomeação

Vimos que o comando rename não exibiu nenhuma informação sobre as alterações que fez. Então, se você deseja obter os detalhes do comando renomear (como fizemos usando a opção “-n”), aqui usamos a opção “-v” para imprimir o arquivo completo detalhes de todas as alterações feitas pelo comando renomear com sucesso.

ravisaive@tecmint:~$ rename -v 's/\.php$/\.html/' *.php

cricket.php renamed as cricket.html
entertainment.php renamed as entertainment.html
health.php renamed as health.html
lifestyle.php renamed as lifestyle.html
news.php renamed as news.html
photos.php renamed as photos.html
sports.php renamed as sports.html

4. Converta todas as letras minúsculas em maiúsculas e vice-versa

Para renomear em lote todos os arquivos com nomes minúsculos para maiúsculas. Por exemplo, quero converter todos os arquivos a seguir de minúsculas para >maiúsculas.

Minúsculas para maiúsculas
ravisaive@tecmint:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html
-rw-rw-r-- 1 ravisaive ravisaive  588895 Oct 10 12:10 entertainment.html
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html
-rw-rw-r-- 1 ravisaive ravisaive  938895 Oct 10 12:10 news.html
-rw-rw-r-- 1 ravisaive ravisaive  938937 Oct 10 12:11 photos.html
-rw-rw-r-- 1 ravisaive ravisaive  978137 Oct 10 12:11 sports.html

Apenas use o seguinte comando com expressão perl.

ravisaive@tecmint:~$ rename 'y/a-z/A-Z/' *.html

Depois de executar o comando acima, você pode verificar as alterações fazendo “ls -l“.

ravisaive@tecmint:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 CRICKET.HTML
-rw-rw-r-- 1 ravisaive ravisaive  588895 Oct 10 12:10 ENTERTAINMENT.HTML
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 HEALTH.HTML
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 LIFESTYLE.HTML
-rw-rw-r-- 1 ravisaive ravisaive  938895 Oct 10 12:10 NEWS.HTML
-rw-rw-r-- 1 ravisaive ravisaive  938937 Oct 10 12:11 PHOTOS.HTML
-rw-rw-r-- 1 ravisaive ravisaive  978137 Oct 10 12:11 SPORTS.HTML

Você pode ver que o comando acima renomeou todos os nomes de arquivos em minúsculas (com extensão .HTML) para maiúsculas.

Maiúsculas para minúsculas

Da mesma forma, você também pode converter todos os caracteres maiúsculos em minúsculos usando o seguinte comando.

ravisaive@tecmint:~$ rename 'y/A-Z/a-z/' *.HTML
ravisaive@tecmint:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html
-rw-rw-r-- 1 ravisaive ravisaive  588895 Oct 10 12:10 entertainment.html
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html
-rw-rw-r-- 1 ravisaive ravisaive  938895 Oct 10 12:10 news.html
-rw-rw-r-- 1 ravisaive ravisaive  938937 Oct 10 12:11 photos.html
-rw-rw-r-- 1 ravisaive ravisaive  978137 Oct 10 12:11 sports.html

5. Coloque a primeira letra do nome do arquivo em maiúscula

Para colocar apenas a primeira letra de cada nome de arquivo em maiúscula, use o seguinte comando.


rename 's/\b(\w)/\U$1/g' *.ext

6. Substituir arquivos existentes

Se desejar substituir à força os arquivos existentes, use a opção “-f” conforme mostrado abaixo.

ravisaive@tecmint:~$ rename -f 's/a/b/' *.html

Se você quiser saber mais sobre o comando rename, digite “man rename” no terminal.

O comando rename é muito útil se você estiver lidando com renomeação múltipla ou em lote de arquivos na linha de comando. Experimente e me diga até que ponto é útil em termos de renomeação de arquivos.