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

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

Re: [shell-script] Como fazer um comando dentro de uma série de diretóri


From: Márcio Gil
Subject: Re: [shell-script] Como fazer um comando dentro de uma série de diretórios
Date: Fri, 28 May 2010 22:02:53 -0300
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.9.1.9) Gecko/20100317 Thunderbird/3.0.4

Estava escrevendo esta outra solução quando você enviou a sua:

for d in */ ; do pushd -n `pwd`/$d ; done

while popd ; do
  for i in `ls -1` ; do
    comando $i
  done
done

O defeito é a saída do comando pushd e popd e o fato dele inverter a lista de diretórios. Mas isso dá para resolver:

for d in `"ls" -1d */ | sort -r` ; do
  pushd -n `pwd`/$d >/dev/null
done

while popd >/dev/null ; do
  for i in `ls -1` ; do
    comando $i
  done
done


Em 28/5/2010 21:52, Fernando Luizao escreveu:
Outra alternativa é usar pushd/popd, algo assim:

cd backup
for i in *

do
     pushd $i
     # faz o que precisa fazer dentro do diretorio
     popd # volta para o diretório backup
done

Abraço

--- Em sex, 28/5/10, Bruno Gunter<address@hidden>  escreveu:

De: Bruno Gunter<address@hidden>
Assunto: Re: [shell-script] Como fazer um comando dentro de uma série de 
diretórios
Para: address@hidden
Data: Sexta-feira, 28 de Maio de 2010, 21:38

Flamarion (esse é o seu nome mesmo?)

Se você qusier uma alternativa a sugestão do Márcio, trabalhe com a variável
$CDPATH pois ela funciona exatamente como a $PATH para os comandos, só que
para diretórios.

[]'s
Gunter

Em 28 de maio de 2010 21:33, Márcio Gil<address@hidden>  escreveu:



Em 28/5/2010 19:13, Flamarion Jorge escreveu:


O script que eu fiz até entra no primeiro diretório e executa o comando,
mas como eu poderia fazer para entrar no proximo? Como o comando cd ia
saber que tem que entrar no próximo diretório?

for i in `ls -1`
do
cd $i
for a in `ls -1`
do
comando $a
done
done


Você pode fazer assim:

for i in */
do
cd $i
for a in *
do
comando $a
done
cd ..
done

ou assim

origem=`pwd`
for i in */
do
cd $origem/$i

do
comando $a
done
done

ou ainda

for i in */
do
do
comando $i$a
done
done






reply via email to

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