volcom
(usa Debian)
Enviado em 07/10/2009 - 12:18h
Pode ser que ajude, com algumas adaptações:
Colaboração: Otávio Penatti
Já houve várias vezes em que precisei renomear vários arquivos
de uma só vez e nos quais havia um certo padrão em seus
nomes. Acredito que isto também já tenho ocorrido com muita
gente além de mim.
Os arquivos tinham, por exemplo, o texto "-www.unicamp.br-"
no nome e eu queria tirar esse pedaço de texto do nome dos
arquivos ou então substituí-lo por algum outro texto.
Com o script abaixo foi possível fazer isso de forma simples:
#!/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
O laço "for" varre os arquivos do diretório atual baseado em
um critério. Por exemplo, se quiser renomear os arquivos JPG
do diretório, basta usar "jpg" como critério. Ou, se quiser
renomear os arquivos que contenham "foto-" no nome, basta usar
"foto-" como critério.
O parâmetro "antigo" é o texto que será substituído no nome
do arquivo, como, por exemplo, "-www.unicamp.br-".
O parâmetro "novo" é o texto substituto, que será colocado
no lugar do texto antigo. Se for vazio, basta usar ''
(aspas simples).
Um detalhe importante no script são as aspas no comando:
mv "$arq" "$(echo $arq | sed "s/$antigo/$novo/")"
Se as aspas não é possível renomear arquivos que contenham
espaços no nome.
O script usa o sed para fazer a troca dos nomes e como o sed
aceita expressões regulares, fica fácil fazer substituições
de texto mais complexas.
Um exemplo de uso do script seria:
./renomeia jpg foto- ''
No exemplo, todos os arquivos que tenham jpg (no nome ou
extensão) terão o texto "foto-" retirado do nome.
Otávio Penatti (http://otavio.penatti.com)
Lembrando mais uma vez que todos os direitos são do Otávio ;)
Abraço