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: 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/ 







reply via email to

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