sexta-feira, 27 de fevereiro de 2009

Renomear vários arquivos no Linux

Diante de um ocasião em que eu tinha que modificar os nomes de vários arquivos ao mesmo tempo. Procurei saber como faria isso automaticamente (eram muitos arquivos).
Achei vários scripts feitos por pessoas muito inteligentes(ou que sabiam copiar de alguem, mas isso não é problema meu) na internet.

Testei vários e vou colocar aqui as várias formas de fazer isso.

1. Mudar somente a extensão dos arquivos.
Há um comando bem simples no linux para modificar somente as extensões dos arquivos

rename .extensaoatual .extensaoquevocequer *.extensaoatual

Como você já deve ter entendido o campo 'extensaoatual' é a extensão que está nos seus arquivos, a que você quer mudar.
Exemplos:
Se vc tem várias fotos com a extensão .JPG, mas quer que as letras fiquem minusculas. Você deve digitar na console

# rename .JPG .jpg *.JPG

Isso fará com que todos os arquivos .JPG do diretorio atual (a pasta em que vc está no momento), fiquem com a extensão .jpg.

rename .GIF .gif *.gif

Isso fará com que todos os arquivos .GIF do diretorio atual (a pasta em que vc está no momento), fiquem com a extensão .gif.
E assim sucessivamente.
Dica de lugar que explica muito bem isso em Piter Punk's.

Como o que eu queria era renomear o 'nome' mesmo do arquivo e deixar a mesma extensão e não consegui descobrir como fazia isso com esse comando [:'(] , continuei procurando e achei outros dois scripts muito legais mesmo!

2. Script que substitui uma parte do nome de um arquivo por outra definida por você.
Dica pegue nesse site.

 #!/bin/bash

criterio=$1
antigo=$2
novo=$3

if [ $# -lt 3 ] ; then
echo "modo de usar: renomeia [criterio] [texto_a_ser_substituido] [texto_substituto]"
exit 0
fi

for arq in *$criterio*
do
mv "$arq" "$(echo $arq | sed "s/$antigo/$novo/")"
done
E como é que faz pra usar um script? Assim;
a. Abra um editor de texto;
b. Copie e cole essas linhas acima no arquivo em branco e salve o arquivo com um nome sugestivo, tipo 'renomear'.
c. Salve o script na pasta onde estão os arquivos a serem renomeados.
d. Estando no diretório onde estão os arquivos que vc quer renomear, digite na console
./nomedoarquivo, se salvar o arquivo como 'renomear',
digite ./renomear extensão 'padrao no nome do arquivo' 'palavra a ser substituida'.

Exemplo:

Você tem uma pasta com várias fotos nomeadas como '-1ª viagem-' e quer substituir isso por 'foto',
digite: ./renomear jpg '-1ª viagem-' 'foto'
Assim o trecho '-1ª viagem-' será substituido por 'foto' em todos os arquivos.

A explicação do site que serviu de referência é mais completa, incluindo alguns termos mais técnicos para quem quiser saber como o script funciona.

3. Renomear os arquivos de forma mais organizada ainda.
Dica peguei de http://www.dicas-l.com.br/dicas-l/20080301.php

  #!/bin/bash
#Padrao é qualquer coisa que vá antes do . (ponto) Ex.: Aniversario_do_Cabecao
echo -e "Padrao: \c"
read PADRAO
#A extensao do arquivo. Digitar jpg aqui pode ser uma boa ideia
echo -e "Extensao: \c"
read EXT

for DIR in $(ls)
do
i=$((i+1))
mv $DIR $PADRAO"_"$i.$EXT
done
O esquema para execução é o mesmo do script anterior: Abrir editor de texto, copiar, colar, salvar.
O que vai mudar um pouco é a chamada a ser feita na console.

Eu fiz assim:

a. Salvei como 'renomear2' na pasta onde estavam as fotos.
b. No diretório atual, digitei ./renomear2 .jpg
c. Daqui em diante, ele pede para vc digitar o padrão a ser procurado e a extensão do arquivo.

O que eu percebi foi que o arquivo é apagado quando o script é executado com sucesso.

Infelizmente, consegui renomear as fotos na primeira vez que tentei e fica muito legal, mas fiz outras tentativas e não obtive sucesso [:'(]

Vou tentar novamente e atualizarei o post.
Mais uma vez, a dica peguei de http://www.dicas-l.com.br/dicas-l/20080301.php

Até mais!






3 comentários :

  1. deu certo de 1a comigo
    para fazer o script:
    vá para a pasta com as fotos, crie um novo arquivo de texto e nomeie de renome.sh e abra-o.
    copie o texto no site e cole dentro do renome.sh, feche o editor (e salve).
    abra um terminal na pasta das fotos e digite sh renome.sh
    tecle enter e pronto.

    ResponderExcluir
  2. outro metodo, usando um arqwuivo como executável:

    #!/bin/bash
    #Padrao é qualquer coisa que vá antes do . (ponto) Ex.: Aniversario_do_Cabecao
    echo 'Por exemplo, se escolher lala todos arquivos serão renomeados como lala_num.'
    echo -e "Padrao: \c"
    read PADRAO
    #A extensao do arquivo. Digitar jpg aqui pode ser uma boa ideia
    echo 'A extenção de todos arquivos, se inp todos arquivos serão *.inp'
    echo -e "Extensao: \c"
    read EXT
    #Nomeia apenas os arquivos que começarem com as letras q vc digitar aqui
    echo 'Nome dos arquivos que serão renomeados: se 'fort', todos arquivos fort serão renomeados'
    echo -e "Nome: \c"
    read NOME

    for DIR in $(ls $NOME*)
    do
    i=$((i+1))
    mv $DIR $PADRAO"_"$i.$EXT
    done

    ResponderExcluir
    Respostas
    1. esse metodo so renomeia arquivos q vc quer (uma versao melhorada do 3 metodo)

      Excluir

Copyright © 2014 KETE