[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: script que substitui espaços
From: |
Leonardo Vieira |
Subject: |
Re: script que substitui espaços |
Date: |
Thu, 03 Mar 2005 17:57:32 -0000 |
User-agent: |
eGroups-EW/0.82 |
Ah galera tem uma coisa se eu usar o script abaixo:
for i in *\ *.xml; do
n=`echo "$i" | tr ' ' _`
mv "$i" "$n"
done
Mesmo que não exista nenhum arquivo com espaço no nome ele entra no
loop e tenta fazer o mv, gerando assim uma mensagem de erro.
Como fazer para que entre no loop, somente se existir algum arquivo
com espaço no nome.
Att.
leonardo Vieira
--- Em address@hidden, "Leonardo Vieira"
<leonardoflavieira@y...> escreveu
>
> Valew galera, realmente era para renomear somente os arquivos de um
> determinado diretório e não de toda a sua raiz.
>
> --- Em address@hidden, Gustavo Chaves
<gustavo@c...>
> escreveu
> > >>>>> On Wed, 2 Mar 2005 20:04:39 -0300, Andreyev Dias de Melo
> <andreyevbr@g...> said:
> >
> > > Como sempre, TIMTOWTDI:
> > > $ find $diretorio -type f -name \*.old | while read LINE ; do
mv
> > > "${LINE}" "${LINE//\ /_}"; done
> >
> > Um problema é que o mv provavelmente não está sendo chamado no
mesmo
> > $diretorio. Mais correto seria:
> >
> > mv "$diretorio/${LINE}" "$diretorio/${LINE//\ /_}"
> >
> > Outro detalhe é que o find vai buscar arquivos em subdiretórios.
A
> > especificação original do problema não era clara, mas eu entendi
que
> > seria apenas para os arquivos do mesmo diretório. Dá pra resolver
> > isso com opções -maxdepth (ser for o find do GNU) ou -prune.
> >
> > Na minha versão eu compliquei o glob usando "*\ *.old" ao invés de
> > "*.old" pra só chamar o mv para os arquivos que contêm espaços. É
> > claro que chamando-o para os que não contém não muda o nome, mas
> pode
> > criar muitos processos desnecessariamente.
> >
> > Gustavo.