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

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

Re: [shell-script] Função Recursiva (Gerar discussão)


From: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] Função Recursiva (Gerar discussão)
Date: Thu, 25 Oct 2007 20:41:42 -0300

Ola Salviano.

Concordo que certos algoritmos tem uma forma mais 'elegante' quando são
escritos na forma recursiva, entretanto recursão pode ser um recurso caro
(principalmente se for recursão multipla, como o caso do calculo da série de
fibonacci quando a função chama a si mesmo 2 vezes).

Nesse exemplo em particular, eu faria o seguinte

find "todos os arquivos" | xargs chmod "opcoes que eu quero"
find "todos os diretorios" | xargs chmod -c 0755

se eu tiver, digamos, uns 40 diretorios e 200 arquivos, a sua função
executaria pelo menos 40 ls, sem falar na chamada de 240 vezes o chmod's
(alem do custo dos ifs). Tanto o ls quanto o chmod são programas externos e
carrega-los, executar a ação uma vez, e descarrega-los muitas vezes consome
tempo.

Este não é o melhor exemplo de uso de recursão, mas está proximo: quando
temos que nos certificar de um backup ou da estrutura de uma certa arvore de
diretorios, acredito que temos que vascular diretorio por diretorio e
analisar as coisas 'la de dentro'. Imagine uma grande sequencia de links
simbólicos, por exemplo, de acordo com um certo padrão, acho que esse tipo
de problema é mais apropriado -- alem do mais esse tipo de coisa tem que
demorar pois é necessário ter certeza, alguns segundos não são nada frente a
um problema.

Se estivermos em um ambiente com um controlador de versões (como um
clearcase ou subversion) acho que pesquisas recursivas são interessantes
também, mas me falta uma experiência pratica.

Lembrei agora de um caso interessante: eu tinha um determinado arquivo que
era emitido por uma ferramenta de teste informando dados sobre alocação de
memória. Cada componente era identificado por um codigo e este codigo estava
'perdido'. Precisei fazer uma pesquisa por diversos arquivos e, pra minha
surpresa, as vezes encontrava uma informação que me levava a outra (e assim
por diante).

Sem falar que algumas informações estava em um bloco comentado. Ou seja, um
grep não adiantava.

Enfim, vamos encontrar exemplos bons de recursão :)

On 10/25/07, Salviano de Araujo Leão <address@hidden> wrote:
>
>   A Thursday 25 October 2007 13:24:41, Tiago Barcellos Peczenyj escreveu:
>
> Olá Tiago
>
> Certamente deve-se ter cuidado ao programar com funções recursivas,
> entretanto acho que o exemplo escolhido mostra um bom uso dela.
> Acho que seria mais difícil fazer isto sem a recursividade.
>
> A não ser por este detalhe, que outras restrições você teria?
>
> Quais seriam os prós e contras?
>
> Abordei este tema por ter encontrado pouca
> documentação a respeito.
>
> Talvez com a experiência dos usuários da lista,
> eu e todos que se interessarem pelo tema possamos
> ter uma boa idéia a respeito da recursividade no shell.
>
>
> > Pessoalmente eu prefiro deixar a recursividade para os programar e
> > ter, no shell algo mais linear (como quando usamos pipes).
> >
> > Porem pode ser um recurso util.
> >
> > On 10/25/07, Salviano de Araujo Leão 
> > <address@hidden<salvianoleao%40yahoo.com.br>>
> wrote:
> > > A Thursday 25 October 2007 11:49:17, RAUL LONGHI escreveu:
> > >
> > > Olá Raul
> > >
> > > Valeu, mas o script foi usado como exemplo, e neste
> > > exemplo ele separa diretorios de arquivos regulares.
> > >
> > > Os diretorios recebem um tipo de permissão e os
> > > arquivos regulares outra.
> > >
> > > A idéia e ver discutir um pouco as funções recursivas.
> > >
> > > Vejamos por exemplo,
> > >
> > > porque não manter $1?
> > >
> > > Ao ser chamada pela segunda vez esta variável
> > > não tem valor, porque abre uma nova instância
> > > do shell, na qual esta variável não possui um valor.
> > >
> > > Uma variável local faz diferença?
> > >
> > > Bom o que eu tinha em mente era discutir
> > > um pouco funções recursivas na lista, porque
> > > é mais rara sua documentação e exemplos de
> > > implementação.
> > >
> > > > buenas,
> > > >
> > > > uma outra maneira seria vc utilizar a opção '-R' para recursividade.
> > > >
> > > > Ex. chmod 0765 local -R
> > > >
> > > > Saudações livres.
> > > >
> > > > Raul
> > > >
> > > > On 10/25/07, Salviano de Araujo Leão 
> > > > <address@hidden<salvianoleao%40yahoo.com.br>>
> wrote:
> > > > > Olá a todos
> > > > >
> > > > > Criei a função recursiva abaixo para mudar a
> > > > > permissão de arquivos, no diretorio local e em todos
> > > > > os abaixo.
> > > > >
> > > > > Colocada no .bashrc ela funciona corretamente e
> > > > > posso chama-lá em qualquer instância do shell.
> > > > >
> > > > > Entretanto se crio um script, devo carregá-lo
> > > > > inicialmente para usar a função.
> > > > >
> > > > > Permisao(){
> > > > > local x CMD MOD
> > > > > cd $PWD
> > > > > MOD="$1"
> > > > > for x in `'ls'`
> > > > > do
> > > > > if [ -f $x ]; then
> > > > > chmod -c $MOD $x
> > > > > elif [ -d $x ]; then
> > > > > echo "Mudando a Permisao do diretorio $x"
> > > > > chmod -c 0755 $x
> > > > > cd $x
> > > > > echo "Entrou no diretorio: $PWD"
> > > > > Permisao $MOD
> > > > > cd ..
> > > > > fi
> > > > > done
> > > > > return
> > > > > }
> > > > >
> > > > > Estou enviandoo script para gerar alguns cometários
> > > > > a respeito de funções recursivas no shell.
> > > >
> > > > [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



-- 
Tiago B Peczenyj
Linux User #405772

http://peczenyj.blogspot.com/


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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