#!c:/perl/bin/perl # das sind module für strictes programmieren und warnungen use strict; use warnings; # ein paar konstanten use constant LOESCHEN => 0; use constant BEHALTEN => 1; use constant DELETED => -1; # dein ordner wo drinne gelöscht werden soll my $dir = "D:/SCRIPTE/ADMINISTRATOR/test1"; # das log file my $logFile = "$dir/log.txt"; my @allFiles; my %allFiles; my $lastMod; # zeitpunkt minus 5 tage also alt die dateien und ordner höchstens sein dürfen my $back5days = (time()-(86400*5)); # hier springt er in die sub cd &cd($dir); # alle dateien durchgehen und schauen ob sie älter als 5 tage sind # ordner werden automatisch auf löschen gesetzt foreach(@allFiles) { $lastMod = (stat($_))[9]; $allFiles{$_} = BEHALTEN if(($lastMod - $back5days) > 0 && -f $_); $allFiles{$_} = LOESCHEN if(($lastMod - $back5days) < 0 && -f $_); $allFiles{$_} = LOESCHEN if -d $_; } # die dateien löschen die älter als 5 tage sind foreach(keys(%allFiles)) { if ($allFiles{$_} == LOESCHEN && -f $_) { $allFiles{$_} = DELETED if unlink($_); } } # die ordner löschen die leer sind # rmdir löscht nur leere ordner foreach(keys(%allFiles)) { if ($allFiles{$_} == LOESCHEN && -d $_) { $allFiles{$_} = DELETED if rmdir($_); } } # den ganzen spass in ne log datei schreiben &loggen(); # logdatei schreiben sub loggen { open(LOGFILE,">$logFile") or die $!; foreach(keys(%allFiles)) { print LOGFILE $_," --> "; print LOGFILE "File/Directory wurde geloescht...\n\n" if $allFiles{$_} == DELETED; print LOGFILE "File/Directory ist aktuell...\n\n" if $allFiles{$_} == BEHALTEN; print LOGFILE "File/Directory wurde nicht geloescht...\n\n" if $allFiles{$_} == LOESCHEN; } close(LOGFILE); } # diese recursive funktion geht in jeden ordner liest den inhalt aus und # falls im inhalt ein ordner ist geht er auch in diesen und soweiter (recursiv halt) # alle pfade von dateien und ordnern werden in ein array geschrieben damit # man sie später löschen oder behalten kann sub cd { my $dir = shift; my $base = $dir."/"; my @currDir; opendir(DIR,$dir) or die $!; @currDir=readdir(DIR); close(DIR); foreach(@currDir) { next if $_ eq '.' or $_ eq '..'; &cd($base.$_) if(-d $base.$_); push(@allFiles,$base.$_); } }