[SP-pm] Dúvidas com o módulo File::Find

Renato Santos renato.cron at gmail.com
Sun Sep 26 08:21:02 PDT 2010


Me parece que o Flávio precisa mesmo da primeira opção:

"Algo mais ou menos assim: "Se for arquivo, faça isto, Mas se for diretório
não faça nada e siga para o próximo""

if (-f $file){
##### do things...
}else{
##### realy need else?
next;
}

2010/9/26 thiago glauco <thiagoglauco at ticursos.net>

> use a segunda forma que eu mandei...
>
> if (not $_ eq "."){
> say $_;
>
> $gpg->decrypt(
> #ciphertext => "$_.gpg",
> ciphertext => "/home/thiago/teste_cripto/$_",
> output => "/home/thiago/teste_cripto/$_.txt",
> symmetric => 1,
> passphrase => $secret
> );
> }
>
>
> "Flávio R. Lopes" wrote:
>
>> Olá Thiago!
>> Desta forma que você passou não funcionou aqui não.
>>
>> Mas funcionou quando eu alterei:
>> exit if $_ eq ".";
>> por
>> next if $_ eq ".";
>>
>> Como disse funcionou, mas ainda fica aparecendo aquelas mensagens (Somente
>> para descriptografar, pois durante a encriptação está tudo ok).
>>
>> Outra coisa, se tiver que colocar como abaixo, eu vou deixar de usar a
>> funcionalidade do File::Find de "varrer" dentro dos diretórios de forma
>> recursiva, certo?:
>> ciphertext => "/home/flavio/teste_cripto/$_",
>> output => "/home/flavio/teste_cripto/$_.txt",
>>
>> Só uma outra coisa:
>> Como faço no Perl (no caso deste meu programa) para que ele não tente
>> criptografar "o diretório, o nome dele", mas somente o que estiver "dentro
>> dele".
>>
>> Algo mais ou menos assim: "Se for arquivo, faça isto, Mas se for diretório
>> não faça nada e siga para o próximo"
>>
>> Não sei se fui claro...
>>
>> Abraço,
>> Flávio
>>
>>
>>
>> Em 26-09-2010 11:00, thiago glauco escreveu:
>>
>>> Primeiro: A função find retorna todos os "arquivos" dentro do diretório,
>>> inclusive a referencia para o próprio diretório, o vulgo "."
>>> Segundo: Ela retorna o nome do diretório, e a menos que seu programa
>>> esteja rodando no mesmo diretório que os arquivos vc precisa do caminho
>>> completo ao arquivo.
>>>
>>> try this:
>>>
>>> sub busca {
>>> #
>>> exit if $_ eq ".";
>>>  $gpg->decrypt(
>>> # #ciphertext => "$_.gpg",
>>>  ciphertext => "/home/thiago/teste_cripto/$_",
>>>  output => "/home/thiago/teste_cripto/$_.txt",
>>>  symmetric => 1,
>>>  passphrase => $secret
>>>  );
>>>
>>> }
>>>
>>> meus 2 centavos.
>>>
>>> Marcio Ferreira wrote:
>>>
>>>> Na Documentação diz haver um parâmetro( o " |untaint_skip|" ) que faz um
>>>> skip do diretório, ou se preferir há uma extensão desse módulo que permiti
>>>> vários tipos de controle, File::Find::Closures -
>>>> http://search.cpan.org/~bdfoy/File-Find-Closures-1.09/lib/Closures.pm <
>>>> http://search.cpan.org/%7Ebdfoy/File-Find-Closures-1.09/lib/Closures.pm>
>>>>
>>>>
>>>> Quanto a descriptografia, é melhor perguntar como ela será realizada ?
>>>> Talvez seja melhor você passar o(s) arquivo(s) como parâmetro, ou fazer uma
>>>> consulta ao banco de dados, JSON, enfim.
>>>>
>>>> Nunca testei esse módulo, mas se isso não resolver posta novamente que
>>>> posso testar.
>>>>
>>>> []s,
>>>>
>>>> @webgenes
>>>> Marcio Ferreira
>>>>
>>>> " Perl  lives as the 'toolbox for Unix' "
>>>>
>>>>
>>>>
>>>> Em 26 de setembro de 2010 01:08, "Flávio R. Lopes" <
>>>> flavio.lopes at links.inf.br <mailto:flavio.lopes at links.inf.br>> escreveu:
>>>>
>>>>    Olá pessoal.
>>>>    Na verdade estou "requentando" uma dúvida minha sobre um programa
>>>>    que comecei e não terminei.
>>>>
>>>>    Estou tentando fazer 2 programas que tratam de criptografar e
>>>>    descriptografar dados recursivamente dentro de uma árvore de
>>>>    diretórios.
>>>>
>>>>    O código deles está aqui: http://gist.github.com/597573
>>>>
>>>>    No programa "criptografa.pl <http://criptografa.pl>" ele já
>>>>    consegue criptografar dados dos diretórios, mas está acontecendo
>>>>    um problema que ele criptografa o nome dos diretórios inclusive os
>>>>    ocultos. Supondo que eu aponte para um determinado diretório e que
>>>>    dentro dele eu tenha um diretório chamado "dir1" e mais dois
>>>>    arquivos chamados "arquivo1" e "arquivo2" ao rodar o programa e se
>>>>    eu der o comando "ls -al" dentro do tal diretório me aparece o
>>>>    seguinte:
>>>>
>>>>
>>>>    dir1
>>>>    arquivo1
>>>>    arquivo1.gpg
>>>>    arquivo2
>>>>    arquivo2.gpg
>>>>    dir1.gpg --> aqui criptograga o nome do diretorio
>>>>    ..gpg -- > e aqui e no debaixo os diretórios ocultos
>>>>    ..gpg.gpg
>>>>
>>>>    Como faço para o programa "pegar" somente os arquivos para
>>>>    criptografar, ignorando os diretórios ?
>>>>
>>>>
>>>>    Já o programa "descriptografa.pl <http://descriptografa.pl>"
>>>>    ocorre um erro que não consegui descobrir e os arquivos não são
>>>>    descriptografados. Acredito que eu esteja errando alguma coisa ao
>>>>    utilizar o módulo File:Find na passagem de parâmetros.
>>>>    A mensagem de erro é esta:
>>>>
>>>>    Protocol error: expected NEED_PASSPHRASE.* got NODATA
>>>>     at /usr/local/lib/perl5/site_perl/5.12.1/GnuPG.pm line 154
>>>>       GnuPG::abort_gnupg('GnuPG=HASH(0xf99b48)', 'Protocol error:
>>>>    expected NEED_PASSPHRASE.* got NODATA\x{a}') called at
>>>>    /usr/local/lib/perl5/site_perl/5.12.1/GnuPG.pm line 345
>>>>       GnuPG::send_passphrase('GnuPG=HASH(0xf99b48)', 123456) called
>>>>    at /usr/local/lib/perl5/site_perl/5.12.1/GnuPG.pm line 740
>>>>       GnuPG::decrypt_postwrite('GnuPG=HASH(0xf99b48)', 'ciphertext',
>>>>    ., 'output', '..txt', 'symmetric', 1, 'passphrase', 123456, ...)
>>>>    called at /usr/local/lib/perl5/site_perl/5.12.1/GnuPG.pm line 725
>>>>       GnuPG::decrypt('GnuPG=HASH(0xf99b48)', 'ciphertext', .,
>>>>    'output', '..txt', 'symmetric', 1, 'passphrase', 123456, ...)
>>>>    called at /home/flavio/workspace/TESTE/decripto_teste.pl
>>>> <http://decripto_teste.pl> line 34
>>>>       main::busca() called at
>>>>    /usr/local/lib/perl5/5.12.1/File/Find.pm line 854
>>>>       File::Find::_find_dir('HASH(0xf99bd8)',
>>>>    '/home/flavio/teste_cripto', 3) called at
>>>>    /usr/local/lib/perl5/5.12.1/File/Find.pm line 722
>>>>       File::Find::_find_opt('HASH(0xf99bd8)',
>>>>    '/home/flavio/teste_cripto/') called at
>>>>    /usr/local/lib/perl5/5.12.1/File/Find.pm line 1297
>>>>       File::Find::find('CODE(0x11617a8)',
>>>>    '/home/flavio/teste_cripto/') called at
>>>>    /home/flavio/workspace/TESTE/decripto_teste.pl
>>>> <http://decripto_teste.pl> line 18
>>>>
>>>>
>>>>    Parece que ele não localiza a senha. Mas eu tentei inclusive
>>>>    colocar a senha dentro da sub eliminando a variável $secret. Ou
>>>>    seja, fez desta forma: passphrase => "123456"
>>>>
>>>>    O que está errado?
>>>>
>>>>    Abraço,
>>>>    Flávio
>>>>    _______________________________________________
>>>>    SaoPaulo-pm mailing list
>>>>    SaoPaulo-pm at pm.org <mailto:SaoPaulo-pm at pm.org>
>>>>    http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> SaoPaulo-pm mailing list
>>>> SaoPaulo-pm at pm.org
>>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>>>
>>>
>>> _______________________________________________
>>> SaoPaulo-pm mailing list
>>> SaoPaulo-pm at pm.org
>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>>
>>>
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm at pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm at pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
Renato Santos
http://www.renatocron.com/blog/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20100926/6cb94dd3/attachment-0001.html>


More information about the SaoPaulo-pm mailing list