Thread Package: libtimedate-perl use File::stat; "use" not allowed in expression at
(16 answers)
Opened by hcx at 2011-07-12 17:27
Hallo Perlmonks,
nachdem Ihr mir bei meinem letzten Problem so toll geholfen habt - nochmals danke dafür - erlaube ich newbie mir euch heute nochmals um eure Hilfe zu bitten. Ich möchte in /var/mail mit allen seinen Unterverzeichnissen d.h root user1 user2 u.s.w. alle mails löschen die älter 30 Tage sind. Dazu sollen die Timestamps der Mails mit dem aktuellen Datum verglichen werden werden. Ich habe dazu mal diese zeilen zusammengehackt - keine Ahnung ob das so funktionieren kann denn schon in Zeile 8 bemängelt der Interpreter "use" not allowed in expression at weil ich File::stat verwende und er stat als "Anweisung" interpretiert - so habe ich es zumindest verstanden. Nun google ich schon den ganzen Tag wie ich das fixen könnte. Ok mit find ging es auch., doch mit Perl is schöner. Danke schonmal für eure Kritik und Tipps hcx Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 #!/usr/bin/perl use warnings; use strict; ############################################################################################################################################ # Skript loescht alle Systemmails die älter als 30 Tage sind durch Vergleich der Zeitstempel## # ############################################################################################ Package: libtimedate-perl use File::stat; use Time::localtime; use Date::Parse; use POSIX; ########################################################################################################################################## my $file_date_string = ctime(stat($file)->mtime); print "file $file updated at $file_date_string\n"; my $time_now = localtime; my $time_file_in_seconds = str2time($file_date_string); my $time_now_in_seconds = str2time($time_now); my $30_days_in_seconds = str2time(86400*30); my $back_30_days = str2time($time_now-(86400*30); ############################################################################################################################################# my $path ="/var/mail/"; my $log ="/home/uli/logs"; my $logfile =">$log/maillog.txt"; ############################################################################################################################################ opendir(DIR,$path) or die "ERROR: Cannot open directory: '$path': $!\n"; my @remove = readdir(DIR); close(DIR); ######################################################################################################################################### open(LOGFILE, $logfile) or die "Cannot open LOGFILE:$logfile $!\n"; ########################################################################################################################################## print "\t ### START FUNCTION CLEAN NOW! ### \n"; &CLEAN($path); print "#\n#\n# WRITE TO LOGFILE $logfile !\n#\n#\n"; open(LOGFILE, ">$logfile") or die "Cannot open LOGFILE:$logfile $!\n"; close LOGFILE; ################################################################################################################################ ########################################################################################################################################### sub CLEAN { foreach $file (@remove) { if($file_date_string > $back_30_days) { print LOGFILE "\t mail older than 30 days found \n"; unlink("$path/$file"); } # END if if(-d $file) { print LOGFILE "\t Is a directory start CLEAN recursively \n"; } # end if } # END foreach } # END REMOVE modedit Editiert von GwenDragon: Als Perl-Code formatiert Last edited: 2011-07-12 17:47:18 +0200 (CEST) |