[caracas-pm-list] Re: [l-linux] Busqueda con find

Cesar Mendoza mendoza at kitiara.org
Wed Jan 21 11:43:29 CST 2004


Hola,

Yo por mi parte me he vuelto fanático de Find::File::Rule.

En este caso la solución seria:

#!/usr/bin/perl

use Find::File::Rule;

my $dias = 7;
@files = File::Find::Rule->file()->mtime('>'.$dias)->in(qw(/var /foo));
unlink @files;

También se podría hacer en un one-liner de esta manera:

perl -MFind::File::Rule -e 'unlink File::Find::Rule->file()->mtime(">7")->in(qw(/var /foo))' 


Para mas información hacerca de este modulo leanse este articulo:

http://www.stonehenge.com/merlyn/LinuxMag/col46.html

Bye
Cesar Mendoza
http://www.kitiara.org
--
"God promises eternal life. We can deliver it"
  --Philip K. Dick slogan for the future

On Wed, Jan 21, 2004 at 09:05:00AM -0400, Ernesto Hernandez-Novich wrote:
> On Tue, 20 Jan 2004, Luis Roa P. wrote:
> > En realidad no estoy seguro si con find puedo hacer lo que necesito.
> >
> > A partir de un determinado path, necesito ubicar archivos cuyo nombre
> > obedece a un patron comun,
> 
> Si el patrón es expresable con metacaracteres del shell puedes usar find
> directamente; es decir, si puedes escribir un 'ls <patrón>' que te
> entregue los nombres de archivo, entonces el mismo patrón te va a
> funcionar con find.
> 
> > y de esos, _solo_ recuperar los nombres de aquellos que tienen mas de "n"
> > dias para borrarlos, sin tocar los que no cumplen ese requisito.
> 
> "Más de n días" se puede interpretar de varias formas:
> - Días desde que fueron creados (Creation Time o ctime).
> - Días desde que fueron modificados (Modification Time, mtime).
> - Días desde que fueron accedidos (Access Time, atime).
> En los ejemplos asumiré lo último, que es lo más frecuente.
> 
> Las cláusulas de find se verifican de izquierda a derecha, de modo que
> 
> find <raíz> -name <patrón> -atime +n -exec rm {} \;
> 
> primero verifica que coincida el nombre, luego la cantidad de tiempo
> desde el último acceso y finalmente lo borra.
> 
> > Me es igual si es shell o perl, mientras pueda incluirlo en un script que
> > debe correr en cron.
> 
> Si el patrón no es expresable con metacaracteres del shell, find no
> puede ayudarte, y entonces podrías utilizar Perl con su módulo
> File::Find.
> 
> #!/usr/bin/perl
> 
> use File::Find;
> 
> find( \&condiciones, qw(/var /foo) );
> 
> sub condiciones {
>   my $file = $File::Find::name;
>   my $dias = 7;
> 
>   $file =~ /patrón/ && int (-M $file) > $dias && unlink($file);
> }
> 
> ...que se puede escribir de forma más compacta como
> 
> #!/usr/bin/perl
> use File::Find;
> find ( sub { /patron/ && int (-A) > 7 && unlink }, qw(/var /foo))
> 
> Perl con el módulo find _siempre_ es más rápido que find; de hecho,
> existe find2perl para traducir comandos find a su equivalente en Perl
> (muy útil para aprender técnicas de programación en Perl :-)
> -- 
> Ernesto Hernández-Novich - On Linux 2.6.0 i686 - Unix: Live free or die!
> Geek by nature, Linux by choice, Debian of course.
> If you can't apt-get it, it isn't useful or doesn't exist.
> GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3
> ------------------------------------------------------------------------
> Enviar e-mail a <majordomo at pm.org> colocando en el cuerpo:
> "UNSUBSCRIBE caracas-pm-list" para desuscribirse.
> "INFO caracas-pm-list" para conocer las reglas de etiqueta.
> ------------------------------------------------------------------------

------------------------------------------------------------------------
Enviar e-mail a <majordomo at pm.org> colocando en el cuerpo:
"UNSUBSCRIBE caracas-pm-list" para desuscribirse.
"INFO caracas-pm-list" para conocer las reglas de etiqueta.
------------------------------------------------------------------------



More information about the caracas-pm mailing list