shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] arquivos com espaco no nome


From: Eliphas Levy Theodoro
Subject: Re: [shell-script] arquivos com espaco no nome
Date: Wed, 23 May 2001 09:33:24 -0300 (BRT)

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.


From (no email address) Wed May 23 06:55:04 2001
Return-Path: <address@hidden>
X-Sender: address@hidden
X-Apparently-To: address@hidden
Received: (EGP: mail-7_1_3); 23 May 2001 13:55:04 -0000
Received: (qmail 29291 invoked from network); 23 May 2001 13:53:20 -0000
Received: from unknown (10.1.10.26) by l8.egroups.com with QMQP; 23 May 2001 
13:53:20 -0000
Received: from unknown (HELO perninha.conectiva.com.br) (200.250.58.156) by 
mta1 with SMTP; 23 May 2001 13:53:16 -0000
Received: from burns.conectiva (burns.conectiva [10.0.0.4]) by 
perninha.conectiva.com.br (Postfix) with SMTP id 7628116B7F for 
<address@hidden>; Wed, 23 May 2001 10:53:12 -0300 (EST)
Received: (qmail 23310 invoked by uid 0); 23 May 2001 13:51:39 -0000
Received: from verde.distro.conectiva (10.0.17.77) by burns.conectiva with 
SMTP; 23 May 2001 13:51:39 -0000
Date: Wed, 23 May 2001 11:01:07 -0300 (BRT)
X-Sender: verde@verde.distro.conectiva
To: address@hidden
Subject: Re: [shell-script] arquivos com espaco no nome
In-Reply-To: <Pine.LNX.4.33.0105230914110.9492-100000@lilica.distro.conectiva>
Message-ID: <Pine.LNX.4.21.0105231056300.820-100000@verde.distro.conectiva>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=iso-8859-1
Content-Transfer-Encoding: 8BIT
X-eGroups-From: # aurelio marinho jargas <address@hidden>
From: # aurelio marinho jargas <address@hidden>

@ 23/5, Eliphas Levy Theodoro:
> Julio Neves, @ 22/05/01 - 16:06:
> > ls -1 *.oi | awk '{print $1"_"$2}'
> 
> ls *.oi | sed 's/ /_/g'

ou

ls *.oi | while read arquivo; do echo $arquivo; 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 .

olha o eliphas usando um canhão pra matar uma mosca... &:)

 
> (Descobri isso esses dias, depois de tanto guardar a variável, que
> simplesmente unset'ando ela volta ao normal)

é, essa dica é massa mesmo.
ou ainda sempre quando for usar o IFS usar uma subshell pra não 
que isso não influa no resto do script, caso vc se esqueça de
"unsetá-lo"...


-- 
s·:(·>(·×^a]×http://www.verde666.org×^[:wq



reply via email to

[Prev in Thread] Current Thread [Next in Thread]