Re: Renomear arquivos
Em Tue, 11 Mar 2003 13:00:33 -0300
"Wilson Dias Goi" <wdgoi@prsp.mpf.gov.br> escreveu:
> Tentei fazer uma script que alterasse um caracter para outro nos
> arquivos, atraves da renomeacao de arquivos.
> A maioria dos arquivos tem espacos em branco.
> Tentei de varias formas mas o mv sempre da a mensagem : "mv: ao mover
> multiplos arquivos o último argumento deve ser um diretorio"
> Por exemplo, aqui tentei converter caracteres maiusculos em
> minusculos:
>
> for x in /bin/ls $dir; do
> y=_cho $x | tr '[:upper:]' '[:lower:]'
> if [ $x != $y]; then
> mv $x $y
> fi
> done
>
> Ja consultei varias documentacoes e nada encontrei sobre este
> problema. Alguem tem uma dica ?
Alem do já indicado pelo Rodrigo, acho que na expansão de `/bin/ls
$dir` o for interpreta os espaços como um separador dos itens da lista.
Então um arquivo com o nome "isso eh um arquivo" é interpretado como
arquivos "isso", "eh", "um", "arquivo".
Uma sugestão é modificar a expressão que dá a lista para o for
substituindo espaços por um outro caracter que nunca apareça nos nomes
dos arquivos, e depois na hora de renomear o arquivo, substituir de
volta o caracter no nome como espaço (no exemplo abaixo, usei o caracter
"+", que julgo difícil aparecer em nome de arquivo, mas poderia ser
outro caracter).
Não sei quase nada de script shell, por isso provavelmente essa é uma
solução deselegante, mas seria algo assim:
for x in `/bin/ls|sed -e "s/\ /+/g"`; do
y=`echo $x | tr [:upper:] [:lower:]`;
if [ $x != $y ]; then
x=`echo $x |sed -e "s/+/\ /g"`;
y=`echo $y|sed -e "s/+/\ /g"`;
mv "$x" "$y";
fi;
done
> Wilson
>
Até mais.
--
Paulo R. Ormenese
GNU/Linux User #200782
Jundiaí-SP
Reply to: