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

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

Re: [shell-script] Re: Script Loop


From: Gustavo Chaves
Subject: Re: [shell-script] Re: Script Loop
Date: 01 Mar 2005 22:55:22 -0300
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3

>>>>> On Tue, 01 Mar 2005 19:26:29 -0000, "Leonardo Vieira" <address@hidden> 
>>>>> 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]