Breno, Donato,<br><br>Se a quantidade de arquivos na árvore for muito grande e/ou o nome deles for muito comprido, eventualmente você pode estourar o buffer da linha de comando (8k no Linux, se a memória não falha) no resultado do find. O jeito mais garantido de fazer isso é:<br>
<br>perl -MFile::Find -le 'find({wanted => sub{print if /\.fdf$/i}, no_chdir => 1 },q{.})' | xargs perl -i.bak -pe 's/CA/CB/g'<br><br>De xargs(1):<br><br>DESCRIPTION<br> This manual page documents the GNU version of xargs. xargs reads items<br>
from the standard input, delimited by blanks (which can be protected<br> with double or single quotes or a backslash) or newlines, and executes<br> the command (default is /bin/echo) one or more times with any initial-<br>
arguments followed by items read from standard input. Blank lines on<br> the standard input are ignored.<br><br>De novo, não tenho idéia de como fazer isso no Janelows. Quando sou obrigado a entrar naquilo, eu geralmente uso Cygwin para tornar a existência minimamente suportável.<br>
<br>[]s,<br>Russo<br><br><div class="gmail_quote">2009/6/9 breno <span dir="ltr"><<a href="mailto:breno@rio.pm.org">breno@rio.pm.org</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im">2009/6/8 Donato Azevedo <<a href="mailto:donatoaz@gmail.com">donatoaz@gmail.com</a>>:<br>
>>><br>
</div><div class="im">>>> perl -MFile::Find "find( sub { print if /\.fdf$/i }, '.' )" | perl<br>
>>> -pi.bak -e "s/CA/CB/g"<br>
>>><br>
>>> alguem sabe o que ta errado, ou mesmo se é possível fazer algo estilo<br>
>>> golf pra isso?<br>
>><br>
<br>
</div>Bom, vejo três problemas aí. O primeiro é que as respostas são dadas<br>
com print puro então vem sem espaço ou quebra de linha. Isso é<br>
facilmente resolvido com o -l. Já o segundo é q o find simples vai<br>
retornar apenas o nome do arquivo, o que impossibilita encontrá-lo<br>
pelo outro script. Para obter o caminho junto com o arquivo (e pulando<br>
linha), vc precisa substituir a primeira parte por algo como:<br>
<br>
perl -MFile::Find -le 'find({wanted => sub{print if /\.fdf$/i},<br>
no_chdir => 1 },q{.})'<br>
<br>
O terceiro problema é que, ao alimentar por pipe um one-liner que faz<br>
-p, é como se vc quisesse modificar esse conteúdo, e não passar<br>
arquivos que deveriam ser abertos e ter o conteúdo modificado (que<br>
acredito ser o q vc quer), como ocorre qdo passamos a lista de<br>
arquivos no final.<br>
<br>
A solução mais óbvia que encontrei foi inverter a ordem dos oneliners<br>
e usando a sintaxe shell de crase `` para indicar "pegue a saida disso<br>
e passe para o primeiro comando". Ficou assim:<br>
<br>
perl -i.bak -pe 's/CA/CB/g' `perl -MFile::Find -le 'find({wanted =><br>
sub{print if /\.fdf$/i}, no_chdir => 1 },q{.})'`<br>
<br>
Mas não tenho idéia de como fazer isso em win32...<br>
<br>
<br>
[]s<br>
<font color="#888888"><br>
-b<br>
</font><div><div></div><div class="h5">_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Alexei Znamensky [russoz_gmail_com] [<a href="http://russoz.wordpress.com">russoz.wordpress.com</a>] [<a href="http://www.flickr.com/photos/alexeiz">www.flickr.com/photos/alexeiz</a>]<br>
"Though we live in trying times, we're the ones who have to try"<br>