Renomear vários arquivos simultaneamente [RESOLVIDO]

1. Renomear vários arquivos simultaneamente [RESOLVIDO]

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 09/08/2010 - 17:04h

Amigos me ajudem, necessito de um script que faça o seguinte:

Possuo um diretório contendo nomes de arquivos diferentes, porém com a mesma extensão, por exemplo:
/home/arquivo1.txt /home/arquivo2.txt /home/arquivo3.txt ... /home/arquivo(n).txt...OK?
BLZ.

Mas agora quero um script que quando executado, renomeie todos os arquivos com extensão txt deste diretório (digamos que tenha 1000 arquivos) de uma só vez. Por exemplo digamos que quero renomear todos os txt para a extensão html. LEMBRANDO que NÃO pode acontecer uma renomeação deste tipo: arquivo1.txt.html, ou seja, o novo arquivo gerado não deve conter .txt no nome do arquivo.
Como eu sou iniciante em shellscript eu não consegui a solução para este problema.

ALguém me ajuda?


  


2. Tem vários jeitos...

Giovanni Cândido da Silva
giovannikenpachi

(usa Ubuntu)

Enviado em 09/08/2010 - 21:17h

Vou te mostra dois:

$ for i in *.txt; do mv $i `echo $i | cut -d. -f1`.html; done

Ou com muito mais elegância e segurança:

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

O primeiro faz um loop for em todos os arquivos com extensão .txt e atribui o seu nome na variável $i, em seguida move o arquivo (mv) de $i para o resultado dos comandos que estão entre acentos + .html

Os comandos entre os acentos fazem o seguinte
ecoa nome do arquivo ($i) o resultado vai para o comando "corte" (cut) considerando o divisor "." (-d.) e pega o primeiro grupo (-f1)

A primeira vista parece complicado mas é simples, estude o que faz o comando de pipe line (|) o comando cut e o significado das aspas simples, duplas, comandos entre acentos. Dê uma olhada nos loops em shell script e nos operadores coringas (*, ?, [])

O segundo comando que é mais seguro pois não move os arquivos (o que se não usado com cuidado pode fazer perder arquivos) é um programa que já vem em quase todos os linux, é quase um comando básico.

O comando rename renomeia vários arquivos de uma só vez e tem como primeiro parâmetro uma expressão regular em perl seguido do conjunto de arquivos (no caso todos que terminam com a extensão txt). A expressão 's/\.txt/\.html/' substitui as ocorrências de ".txt" para ".html". Procure por expressões regulares em perl para mais informações e mais expressões poderosas (é chato mas é muito útil)


3. 1º Exemplo Resolvido

Wilton Araújo Câmara
wiltontsi

(usa Debian)

Enviado em 21/09/2011 - 11:43h

Saudações,

Resolveu o meu problema com o segundo exemplo (rename 's/\.ppt/\.pps/' *.ppt).
Obrigado!

Com o primeiro exemplo (for i in *.pps; do mv $i `echo $i | cut -d. -f1` .ppt; done) o sistema responde:
mv: o alvo ".ppt" não é um diretório
mv: o alvo ".ppt" não é um diretório
mv: o alvo ".ppt" não é um diretório
mv: o alvo ".ppt" não é um diretório
mv: o alvo ".ppt" não é um diretório
mv: o alvo ".ppt" não é um diretório
mv: o alvo ".ppt" não é um diretório
mv: o alvo ".ppt" não é um diretório

Por favor, você poderia me dá uma dica para resolver o problema...

Obrigado





4. Re: Renomear vários arquivos simultaneamente [RESOLVIDO]

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 22/09/2011 - 13:18h

Só foi um espaço a mais no comando (entre -f1` e .)
tenta o abaixo.

for i in *.pps; do mv $i `echo $i | cut -d. -f1`.ppt; done


5. Re: Renomear vários arquivos simultaneamente [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 23/09/2011 - 17:34h

Cara, todas as respostas estão neste artigo!
Ele está em Xdialog, caso você queira fazer na mão veja as funções do script. Todas possuem um comentário acima dizendo o que faz!
Boa sorte!


6. Re: Renomear vários arquivos simultaneamente [RESOLVIDO]

7. obrigado

Walquírio Saraiva Rocha
walquiriosaraiva

(usa Kurumin)

Enviado em 11/05/2013 - 15:31h

Esse comando é perfeito:
rename 's/\.JPG/\.jpg/' *.JPG

estava precisando disso mesmo. alterar a extensão de todos os arquivo de um diretório dai entrei no diretorio e executei o comando abaixo e pronto tudo que era .JPG foi alterado para .jpg

valeu galera.


8. faltaram aspas

Diogo Munaro Vieira
dmvieira

(usa Ubuntu)

Enviado em 10/12/2014 - 10:04h

Sei que já foi resolvido de outra forma, mas era só uma questão de aspas no $i, pois o nome do arquivo devia ter espaços:

for i in *.pps; do mv "$i" `echo $i | cut -d. -f1`.ppt; done






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts