[SP-pm] Dúvidas com o módulo File::Find
"Flávio R. Lopes"
flavio.lopes at links.inf.br
Sun Sep 26 08:09:24 PDT 2010
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 em links.inf.br <mailto:flavio.lopes em 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 em pm.org <mailto:SaoPaulo-pm em pm.org>
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>>
>>
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
More information about the SaoPaulo-pm
mailing list