#!/usr/bin/perl # Bitte immer diese Moduke verwenden use strict; use warnings; # Das Arbeitsverzeichnis in einer Variable plazieren, # ansonsten ist es unnötig kompliziert das zu ändern. my $workdir='/var/spool/amavis/virusmails/test'; my $logfile='/var/log/script/log.0'; my $sollalter=31; my $count=0; # reine Ahnung was das machen soll.... my $t='???'; # mach eine Fehlermeldung, # wenn du versuchst das Verzeichnis zu öffnen. opendir(DIR,$workdir) or die "Konnte '$workdir' nicht öffnen! ($!)\n"; my @files=readdir(DIR); closedir(DIR); # Im Array @files steht auch "." und ".." drin. # es ist günstig das zu entfernen. @files=grep{$_!~/^(?:.|..)$/}@files; open(LOG, '>', $logfile) or die "Konnte '$logfile' nicht öffnen ($!)\n"; # ich halte es für "unschön" und unübersichtlich, # wenn man ständig "$_" verwendet. # Ist aber Ansichtssache. foreach my $file (sort @files) { # Du must "$workdir/$file" schreiben, # da "$workdir" kein abschließenden "/" hat. my $alter = (-M "$workdir/$file"); # Es macht nur sinn alle weiteren Prüfungen zu machen, # wenn die Datei wirklich älter als 31 Tage ist. if ($alter > $sollalter) { # Jetzt die Datei öffnen und nach virus suchen. my $hat_virus=0; open(DATEI, '<', "$workdir/$file") or warn "konnte Datei '$workdir/$file' nicht öffnen ($!)\n"; while() { if($_=~m/virus/i) { $hat_virus=1; last(); } } close(DATEI); if ($hat_virus) { $count++; # print "$workdir/$file = $alter\n"; print LOG "$t: $workdir/$file älter als 31 Tage ($alter). -> gelöscht\n"; # es ist günstiger Perleigene Befehle zu nutzen. # zum einen ist er schneller, # zum anderen ist es eifacher eine Fehlermeldung zu machen. # # Hier könnte man auch if(unlink(...)) machen # und das erfolgreiche Löschen ins LOG schreiben unlink("$workdir/$file") or warn "konnte '$workdir/$file' nicht löschen ($!)\n"; # print "$workdir/$file wurde geloescht.\n"; } } } print LOG "$t -->; $count Dateien wurden geloescht.\n"; close (LOG);