use strict; use warnings; use POSIX; my $workdir='/var/spool/virusmails'; my $logfile='/var/log/del-old-virus.log'; my $sollalter=31; my $count=0; my $t = strftime "%d.%m.%Y - %H:%M:%S", localtime; opendir(DIR,$workdir) or die "Konnte '$workdir' nicht oeffnen! ($!)\n"; my @files=readdir(DIR); closedir(DIR); # Im Array @files steht auch "." und ".." drin. # Punkte werden in der folgenden Zeile entfernt. @files=grep{$_!~/^(?:.|..)$/}@files; open(LOG, '>>', $logfile) or die "Konnte '$logfile' nicht oeffnen ($!)\n"; foreach my $file (sort @files) { my $alter = (-M "$workdir/$file"); # Weitere Pruefungen werden nur gemacht wenn Datei wirklich > 31 Tage ist if ($alter > $sollalter) { # Jetzt die Datei oeffnen und nach virus suchen. my $hat_virus=0; open(DATEI, '<', "$workdir/$file") or warn "konnte Datei '$workdir/$file' nicht oeffnen ($!)\n"; while() { # if($_ = ~/virus/ or $_ = ~/BAD/) { # hier wird nach den strings "virus" oder "BAD" gesucht # if($_=~m/virus/i) { # hier wird nur nach dem string virus gesucht # $hat_virus=1; last(); } } close(DATEI); if ($hat_virus) { $count++; print LOG "$t: $workdir/$file aelter als 31 Tage ($alter). -> geloescht\n"; unlink("$workdir/$file") or warn "konnte '$workdir/$file' nicht loeschen ($!)\n"; } } } print LOG "$t -->; $count Dateien wurden geloescht.\n"; close (LOG);