<span dir="ltr"></span><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Stanislaw> O find, sendo altamente especializado, é mais<br>
Stanislaw> eficiente... Na minha máquina, o mesmo comando, usando<br>
Stanislaw> "/" ao invés de "/etc", leva 5 segundos, contra 8.6 via<br>
Stanislaw> Perl. Que fique claro: com a tabela de inodes<br>
Stanislaw> cacheada. Ou seja: na 1-a "rodada", qqer um deles demora<br>
Stanislaw> muuuuuuito mais por conta do acesso não-contínuo ao disco<br>
Stanislaw> (a menos que vc tenha SSD, que ajuda).<br>
<br>
Fica um pouco mais rápido assim:<br>
<div class="im"><br>
perl -MFile::Find -E 'find sub{say $File::Find::name if -f && 1.0 > -M _}, qw(/etc)'<br></div></blockquote><div><br>Boa!<br>Aliás, rodei agora que acabei de bootar a máquina e levou 2 min e 10 seg para vasculhar o '/'. Nada mal.<br>
Outra coisa: em supostamente qualquer sintaxe do "find", é só trocar por "find2perl" que terás um programa em Perl equivalente:<br><br><span style="font-family: courier new,monospace;">$ find2perl /etc -mtime -1 -type f -print</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">#! /usr/bin/perl -w</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> if 0; #$running_under_some_shell</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">use strict;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">use File::Find ();</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"># Set the variable $File::Find::dont_use_nlink if you're using AFS,</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"># since AFS cheats.</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"># for the convenience of &wanted calls, including -eval statements:</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">use vars qw/*name *dir *prune/;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">*name = *File::Find::name;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">*dir = *File::Find::dir;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">*prune = *File::Find::prune;</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">sub wanted;</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"># Traverse desired filesystems</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">File::Find::find({wanted => \&wanted}, '/etc');</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">exit;</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">sub wanted {</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> my ($dev,$ino,$mode,$nlink,$uid,$gid);</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> (int(-M _) < 1) &&</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> -f _ &&</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> print("$name\n");</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">}</span><br style="font-family: courier new,monospace;">
<br></div></div>