você está aqui: Home  → Arquivo de Mensagens

Como renomear múltiplos arquivos com um único comando

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 11 de dezembro de 2015

O comando rename permite que alteremos o nome de diversos arquivos de uma só vez, com um único comando:

  $ ls
  a.txt  c.txt  e.txt  g.txt  i.txt  k.txt  m.txt  o.txt  q.txt  s.txt  u.txt  w.txt  y.txt
  b.txt  d.txt  f.txt  h.txt  j.txt  l.txt  n.txt  p.txt  r.txt  t.txt  v.txt  x.txt  z.txt

Vamos alterar a extensão de todos os arquivos de .txt para .doc:

  rename 's/txt/doc/' *.txt
  $ ls
  a.doc  c.doc  e.doc  g.doc  i.doc  k.doc  m.doc  o.doc  q.doc  s.doc  u.doc  w.doc  y.doc
  b.doc  d.doc  f.doc  h.doc  j.doc  l.doc  n.doc  p.doc  r.doc  t.doc  v.doc  x.doc  z.doc

O primeiro argumento do programa rename é um comando perl de substituição ('s/txt/doc/') e o segundo argumento é a lista de arquivos aos quais serão aplicados os comandos.

O comando rename possui a seguinte sintaxe:

rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]

A diretiva -n indica ao programa para não fazer nada, o programa apenas exibe o que iria fazer:

  $ rename -n 's/txt/doc/' *.txt
  *.txt renamed as *.doc

A diretiva -f força o programa a sobrescrever o arquivo destino, caso exista.

O programa rename é de autoria de Larry Wall, o criador da linguagem Perl.



 

 

Veja a relação completa dos artigos de Rubens Queiroz de Almeida

Opinião dos Leitores

Xinuo
17 Dez 2015, 17:35
O Fedora 23 vem com um comando rename que pertence ao pacote util-linux, que não é esse que foi apresentado aqui. O do Fedora trabalha da seguinte forma para trocar os nomes de *.doc para *.txt:

rename -v doc txt *.doc

A opção "-v" é para mostrar o que está acontecendo enquanto o comando atua. O primeiro texto diz o que será mudado, o segundo diz por qual texto será modificado e o terceiro e demais diz quais arquivos serão considerados na mudança proposta
Hítalo
12 Dez 2015, 05:29
Não ficou muito claro onde conseguir o programa.
Aproveito para dar um exemplo de como resolver o mesmo problema com comandos nativos do shell.

for i in *.txt; do mv "$i" "${i/txt/doc}"; done;
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script