[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.
copiar arquivos cujo nome possui espaço, edersom_cei, 2005/03/01