[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