Em Tue, 11 Mar 2003 13:00:33 -0300 "Wilson Dias Goi" <[EMAIL PROTECTED]> 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