Pesquisa de site

Renomear arquivos e diretórios na linha de comando do Linux


Neste tutorial básico de linha de comando, aprenda as várias maneiras de renomear arquivos e diretórios no terminal Linux.

Como você renomeia arquivos e diretórios no terminal Linux? Você usa o comando mv.

Sim, o mesmo comando mv usado para 'mover' arquivos e pastas de um local para outro.

Você pode simplesmente especificar o novo nome para os arquivos e diretórios enquanto os ‘move’.

Para renomear um arquivo, use:

mv old_file new_file

Da mesma forma, para renomear um diretório, use:

mv old_dir new_dir

Parece fácil, certo? Mas discutirei a renomeação de arquivos em detalhes aqui:

  • Mostrar exemplos práticos de renomeação

  • Mostre um exemplo de renomeação em massa de vários arquivos combinando os comandos find e exec

  • Discuta um utilitário de renomeação dedicado para renomear arquivos em lote

Vamos ver um por um.

Renomeando arquivos e diretórios com o comando mv

Use o comando mv para renomear um arquivo no mesmo diretório:

mv file1.txt file2.txt

Da mesma forma, você pode renomear um diretório no mesmo local:

mv dir1 dir2

Aqui está um exemplo em que renomeio um arquivo e um diretório:

Como você pode ver, diferentemente do comando cp, você não precisa usar a opção recursiva para manipular diretórios com o comando mv.

🚧
Se você tentar renomear o arquivo com o mesmo nome, verá um erro (obviamente).

Você também pode renomear um arquivo enquanto o move para outro local:

mv old-file-name another_dir/new-file-name

No exemplo abaixo, movi o arquivo chamado firefox-quiz.txt para o diretório de amostra. E enquanto fazia isso, renomeei-o como quiz.txt.

Eu penso nisso como a operação de recortar e colar.

💡
Embora você possa mover vários arquivos para outro local (mv arquivo1 arquivo2 arquivo2 diretório), NÃO PODE renomear vários arquivos com mv. Para isso, você deve empregar outras táticas que discutirei nas seções a seguir.

Renomeando vários arquivos que correspondam a um padrão combinando os comandos mv, find e exec

🚧
Tenha muito cuidado ao renomear arquivos em lote como esses. Um movimento errado e você terminará com um resultado indesejado que não pode ser desfeito.

O comando find é usado para localizar arquivos em um determinado diretório com base em seu nome, tipo, hora de modificação e outros parâmetros. O comando exec é combinado com find para executar comandos no resultado do comando find.

Não existe uma estrutura padrão definida para usar os comandos find, exec e mv. Você pode combiná-los conforme sua necessidade.

Digamos que você queira renomear todos os arquivos que terminam com .txt no diretório atual adicionando _old em seu nome. Então file_1.txt se torna file_1.txt_old etc.

find . -type f -name "*.txt" -exec mv {} {}_old ;

Este é apenas um exemplo e seus requisitos de renomeação podem ser diferentes. Além disso, o acima funciona apenas com nomes de arquivos sem espaços.

Dica profissional: ao lidar com ações em massa como essa, você pode usar o comando echo de maneira inteligente para ver qual ação será executada em vez de realmente executá-la. Se parecer bom, prossiga com a ação real.

Por exemplo, primeiro veja quais arquivos serão renomeados:

find . -type f -name "*.txt" -exec echo mv {} {}_old \;

Como você pode ver, nenhum arquivo foi renomeado. Mas você poderá ver qual comando será a ação se executar o comando acima sem eco.

Se parecer bom para você, remova o comando echo e prossiga com a renomeação real.

find . -type f -name "*.txt" -exec mv {} {}_old \;

Aprendi esse truque no livro Efficient Linux at the Command Line. Um excelente livro repleto de pequenas jóias como esta. Não admira que tenha se tornado um dos meus livros favoritos sobre Linux.

Novo livro: Linux eficiente na linha de comando

Livro sobre Linux incrível com muitas dicas práticas. Ele preenche a lacuna, mesmo para usuários Linux experientes. Deve ter em sua coleção.

Renomeando vários arquivos facilmente com o comando rename

Existe um utilitário de linha de comando útil chamado rename que pode ser usado para renomear arquivos em lote com base no padrão regex Perl fornecido.

Este utilitário não faz parte do conjunto de ferramentas GNU e nem vem pré-instalado. Então você precisa usar o gerenciador de pacotes da sua distribuição para instalá-lo primeiro.

Para Debian/Ubuntu, o comando seria:

sudo apt install rename

Você pode usá-lo da seguinte maneira:

rename [options] perl_regex [files]

As opções são:

  • -v: modo detalhado

  • -n: Nenhuma ação, mostra os arquivos que seriam renomeados, mas não os renomeia

  • -o: Sem substituição

  • -f: Força a substituição de arquivos existentes

  • -s: Não renomeie o link virtual, mas seu destino

Agora, vamos pegar o mesmo exemplo que você viu na seção anterior. Renomeando *.txt para .txt_old.

rename 's/\.txt$/.txt_old/' **

Não vou explicar o regex aqui. O ** significa examinar todos os arquivos em todos os subdiretórios.

E como você pode ver, funciona conforme o esperado.

🚧
No Red Hat e no Fedora, o comando rename é uma implementação C e, portanto, pode ter sintaxe e comportamento diferentes. Leia mais sobre isso.

Conclusão

Espero que tenha gostado desta dica que ajuda você a aprender a realizar tarefas básicas na linha de comando do Linux. Claro, é para quem quer aprender e usar a linha de comando. Os usuários de desktop sempre têm as ferramentas GUI para tais tarefas.

Se você é absolutamente novo nos comandos do Linux, esta série irá ajudá-lo bastante.

Deixe-me saber se você tiver dúvidas ou sugestões.

Artigos relacionados: