[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] arquivos com espaco no nome
From: |
Julio Neves |
Subject: |
Re: [shell-script] arquivos com espaco no nome |
Date: |
Wed, 23 May 2001 16:59:03 -0300 |
Falou Eliphas,
é justamente isso, o ls -1 lista um arquivo por linha, para o awk
distinguir cada arquivo como uma linha, e + uma vez vc tem razão qto a qtd
de brancos. A linha que montei só substitui o 1o. branco por sublinha.
Pelos exemplos dados foi isso que achei que o Fábio queria.
As suas soluções estão muito melhores, mas estou sem Linux e sem testar
não me atrevo a falar em sed, expressões regulares, ... numa lista que tem
Aurélio e Eliphas. Tá doido sô?
A sua bolada de mudar o IFS foi sensacional e inusitada. Gostei muito.
Forte abraço,
Julio Cezar Neves
Recebi esta hoje: "Os peixes odeiam redes, eles preferem sistemas monousuário."
Favor responder a address@hidden
Enviado Por: <address@hidden>
Para: <address@hidden>
cc:
Assunto: Re: [shell-script] arquivos com espaco no nome
Julio Neves, @ 22/05/01 - 16:06:
> Olá Fábio,
> A linha abaixo deve fazer o pretendido de forma + rápida.
>
> ls -1 *.oi | awk '{print $1"_"$2}'
Ou:
ls *.oi | sed 's/ /_/g'
para dar o mesmo resultado. Julio, não entendo muito (nada) de awk, mas
isso ($1 e $2) não colocaria somente um sublinhado por linha?
Ah, a partir do momento que você joga a saÃda do ls não é para o terminal,
ele automaticamente usa o -1 (um arquivo por linha), pelo menos o GNU ls:
-->
-1, --format=single-column
Lista um arquivo por linha. Isto é o padrão quando a saÃda
padrão não é um terminal.
<--
> Estou com o seguinte problema num trecho de script:
>
> for X in `ls -Q *.oi`
> do
> TESTE=`echo $X | tr ' ' '_'`
> echo Arquivo da vez: $TESTE
> done
> --
> SaÃda:
>
> Arquivo da vez: "quero
> Arquivo da vez: mule
> Arquivo da vez: boa.oi"
> Arquivo da vez: "ola.oi"
>
>
> Ou seja, a estrutura for está tratando cada palavra do nome
> do arquivo como um elemento em si, mesmo estando eles entre
> "quotes". Já tentei combinar o for com eval, mas sem sucesso.
Eu usaria
for X in `ls *.oi | sed 's/ /_/g'`
do
echo Arquivo da vez: $X
done
ou então um jeito mais hardcore:
IFS=°
for X in `ls *.oi`
do
TESTE=`echo $X | tr ' ' '_'`
echo Arquivo da vez: $TESTE
done
unset IFS
O IFS às vezes atrapalha nesses casos (porque tem espaço e tab), então dá
pra configurar ele para um caractere chulo e depois voltar ao normal .
(Descobri isso esses dias, depois de tanto guardar a variável, que
simplesmente unset'ando ela volta ao normal)
Então:
@@ -1 +0 @@
-OLDIFS="$IFS"
@@ -5 +4 @@
-IFS="$OLDIFS"
+unset IFS
Argh, só eu pra entender patch ':)
--
Eliphas
Get forgiveness now -- tomorrow you may no longer feel guilty.
Sair da lista: address@hidden
Banco Dados: http://www.egroups.com/group/shell-script
Seu uso do Yahoo! Groups é sujeito às regras descritas em:
http://docs.yahoo.com/info/terms/