[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Re: script que substitui espaços
From: |
Gustavo Chaves |
Subject: |
Re: [shell-script] Re: script que substitui espaços |
Date: |
03 Mar 2005 16:08:37 -0300 |
User-agent: |
Gnus/5.09 (Gnus v5.9.0) Emacs/21.3 |
>>>>> On Thu, 03 Mar 2005 17:57:32 -0000, "Leonardo Vieira" <address@hidden>
>>>>> said:
> 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.
No caso da bash, há uma opção de shell que controla a expansão de
globs quando eles não casam com nenhum arquivo: nullglob. Quando
desabilitado (o default), se o glob não casar com nada ele
simplesmente não é expandido, ficando na linha de comando. Veja:
$ mkdir x
$ cd x
$ touch a.txt
$ shopt nullglob
nullglob off
$ echo *.txt
a.txt
$ echo *.xtx
*.xtx
$
Note que ao tentar expandir o *.xtx, como não casou com nada, o echo
recebeu o glob original e o ecoou. Se você habilitar a opção
nullglob, veja o que acontece:
$ shopt -s nullglob
$ shopt nullglob
nullglob on
$ echo *.xtx
$
Portanto, outra alternativa para resolver o problema seria executar um
'shopt -s nullglob' antes do loop.
Gustavo.