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.
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.
Renomeando vários arquivos que correspondam a um padrão combinando os comandos mv, find e exec
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.
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.