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<[email protected]> escreveu:
>
> De: Bruno Gunter<[email protected]>
> Assunto: Re: [shell-script] Como fazer um comando dentro de uma série de
> diretórios
> Para: [email protected]
> 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<[email protected]> 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
>>
>>
>