No hay seis maneras de hacer esto, hay la manera antigua, y la nueva forma. La forma antigua es con File :: Find, y ya tienes un par de ejemplos de eso. File :: Find tiene una interfaz de devolución de llamada bastante horrible, fue genial hace 20 años, pero hemos avanzado desde entonces.
Aquí hay un programa de la vida real (ligeramente modificado) que utilizo para limpiar el cruft en uno de mis servidores de producción. Utiliza File :: Find :: Rule, en lugar de File :: Find. File :: Find :: Rule tiene una interfaz declarativa agradable que se lee fácilmente.
Randal Schwartz también escribió File :: Finder, como un contenedor sobre File :: Find. Es bastante agradable, pero en realidad no ha despegado.
#! /usr/bin/perl -w
# delete temp files on agr1
use strict;
use File::Find::Rule;
use File::Path 'rmtree';
for my $file (
File::Find::Rule->new
->mtime('<' . days_ago(2))
->name(qr/^CGItemp\d+$/)
->file()
->in('/tmp'),
File::Find::Rule->new
->mtime('<' . days_ago(20))
->name(qr/^listener-\d{4}-\d{2}-\d{2}-\d{4}.log$/)
->file()
->maxdepth(1)
->in('/usr/oracle/ora81/network/log'),
File::Find::Rule->new
->mtime('<' . days_ago(10))
->name(qr/^batch[_-]\d{8}-\d{4}\.run\.txt$/)
->file()
->maxdepth(1)
->in('/var/log/req'),
File::Find::Rule->new
->mtime('<' . days_ago(20))
->or(
File::Find::Rule->name(qr/^remove-\d{8}-\d{6}\.txt$/),
File::Find::Rule->name(qr/^insert-tp-\d{8}-\d{4}\.log$/),
)
->file()
->maxdepth(1)
->in('/home/agdata/import/logs'),
File::Find::Rule->new
->mtime('<' . days_ago(90))
->or(
File::Find::Rule->name(qr/^\d{8}-\d{6}\.txt$/),
File::Find::Rule->name(qr/^\d{8}-\d{4}\.report\.txt$/),
)
->file()
->maxdepth(1)
->in('/home/agdata/redo/log'),
) {
if (unlink $file) {
print "ok $file\n";
}
else {
print "fail $file: $!\n";
}
}
{
my $now;
sub days_ago {
# days as number of seconds
$now ||= time;
return $now - (86400 * shift);
}
}
Creo que puede tener un problema con la simplicidad, a menudo en la simplicidad perl no es la mejor o más elegante solución. –
Buen punto, gracias. Dejaré que todo el mundo lo resuelva en sus respuestas si sienten que se agrega a su solución. – keparo