[SP-pm] Buscar arquivos por data de alteração
Stanislaw Pusep
creaktive at gmail.com
Fri Jan 14 03:28:34 PST 2011
> Stanislaw> O find, sendo altamente especializado, é mais
> Stanislaw> eficiente... Na minha máquina, o mesmo comando, usando
> Stanislaw> "/" ao invés de "/etc", leva 5 segundos, contra 8.6 via
> Stanislaw> Perl. Que fique claro: com a tabela de inodes
> Stanislaw> cacheada. Ou seja: na 1-a "rodada", qqer um deles demora
> Stanislaw> muuuuuuito mais por conta do acesso não-contínuo ao disco
> Stanislaw> (a menos que vc tenha SSD, que ajuda).
>
> Fica um pouco mais rápido assim:
>
> perl -MFile::Find -E 'find sub{say $File::Find::name if -f && 1.0 > -M _},
> qw(/etc)'
>
Boa!
Aliás, rodei agora que acabei de bootar a máquina e levou 2 min e 10 seg
para vasculhar o '/'. Nada mal.
Outra coisa: em supostamente qualquer sintaxe do "find", é só trocar por
"find2perl" que terás um programa em Perl equivalente:
$ find2perl /etc -mtime -1 -type f -print
#! /usr/bin/perl -w
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
if 0; #$running_under_some_shell
use strict;
use File::Find ();
# Set the variable $File::Find::dont_use_nlink if you're using AFS,
# since AFS cheats.
# for the convenience of &wanted calls, including -eval statements:
use vars qw/*name *dir *prune/;
*name = *File::Find::name;
*dir = *File::Find::dir;
*prune = *File::Find::prune;
sub wanted;
# Traverse desired filesystems
File::Find::find({wanted => \&wanted}, '/etc');
exit;
sub wanted {
my ($dev,$ino,$mode,$nlink,$uid,$gid);
(($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
(int(-M _) < 1) &&
-f _ &&
print("$name\n");
}
-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20110114/c59f5cce/attachment.html>
More information about the SaoPaulo-pm
mailing list