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

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

Re: Script Loop


From: Leonardo Vieira
Subject: Re: Script Loop
Date: Wed, 02 Mar 2005 12:19:42 -0000
User-agent: eGroups-EW/0.82

Me ocorreu uma dúvida, se eudeixar o script assim:

count=1

for i in '*.xml'; do
echo $count
echo $i
((count+=1)); 
done

Ele só imprime o valor de ocunt igual a 1, e imprime todos os nomes 
de arquivos um do lado do outro.

Parece que ele só entra no loop uma vez, e meu objetivo não é esse, 
preciso entrar no loop a quantidades de vezes proporcionais ao 
números de arquivos no diretório.

Alguma ideia do que pode estar acontecendo?

VAlewww

--- Em address@hidden, Gustavo Chaves <gustavo@c...> 
escreveu
> >>>>> On Tue, 01 Mar 2005 19:26:29 -0000, "Leonardo Vieira" 
<leonardoflavieira@y...> said:
> 
>   > Isso gustavo, todos os arquivos de origem são os que terminam em
>   > .txt.
> 
>   > e quero a cada vez que entrar no la~ço renomear um dos arquivos 
do
>   > diretório , por exemplo, arq1.txt para arq.txt, e no passo
>   > seguinte, arq2.txt para arq.txt.
> 
> Hmmm... se você exemplificar com um caso real talvez dê pra inferir 
a
> regra geral.
> 
> Se só o que você quer é mover todos os arquivos *.txt para um único
> nome (sobrepondo-os todos) pra processá-los, então seria algo assim:
> 
>         for i in *.txt; do
>           mv $i arq.txt
>           : ...
>         done
> 
> Se o propósito é remover parte do nome original (e.g., tirando os
> números antes do ".txt"), então seria algo assim:
> 
>         for i in *.txt; do
>           prefix=`echo $i | sed 's/[0-9]*\.txt$//'`
>           mv $i ${prefix}.txt
>           : ...
>         done
> 
> Hmm.. estas chamadas ao sed dentro do loop podem ser caras, 
dependendo
> do número de arquivos que você vai processar.  Dá pra fazer um único
> sed processar todos os arquivos de uma vez antes do loop assim:
> 
>         ls | sed -n '/\.txt$/s/[0-9]*\.txt$//;p' | while read 
prefix; do
>           mv $i ${prefix}.txt
>           : ...
>         done
> 
> Se a regra for outra você provavelmente vai poder usar uma técnica
> parecida com esta última, i.e., usando o sed pra gerar o resultado.
> 
> (BTW, note que nos exemplos acima eu estou supondo que você esteja 
no
> diretório que contém os arquivos pra que eu não tenha que me 
preocupar
> em retirar os nomes dos diretórios dos arquivos.  Se você não 
estiver
> lá, faça um 'cd' antes e outro depois.  Melhor ainda, use um 'pushd'
> antes e um 'popd' depois se estiver usando uma shell que os suporte.
> Em último caso, se o resto do interior do loop precisar estar em 
outro
> contexto, use o comando 'basename' pra eliminar o diretório dos 
nomes
> dos arquivos.)
> 
> Boa sorte!
> 
> Gustavo.




reply via email to

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