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
Quote-M Script start time minus file modification time, in days.
1 2 3 4 5 6 7
my $max_days = 30; for my $file ( glob("*.*") ) { if ( -M $file > $max_days ) { print "$file is older than $max_days days.\n"; } }
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
#!/usr/bin/perl # vim: set ts=4 sw=4 et sta: use strict; use warnings; use File::Spec; my $dir = '/var/mail'; my $max_age = 30; sub read_dir { my $dir = shift; # no input, no result return () if !defined $dir; opendir my $dh, $dir or die "$dir: $!\n"; # read entries from directory, exclude . and .. # create path for and to each entry and store # results in @entries my @entries = map { File::Spec->join( $dir, $_ ) } grep { ! m{\A\.\.?\z} } readdir $dh; closedir $dh; return @entries; } ### MAIN my @to_check = read_dir( $dir ); for my $entry ( @to_check ) { if ( -M $entry > $max_age ) { print "$entry is older than $max_age.\n"; } }
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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
#! /usr/bin/perl # Skript, das Dateien in einem zu definierenden Ordner loescht, # wenn die Datei ein zu definierendes Alter ueberschritten hat # # Hier: Loesche die mailbox Dateien aus /tmp/mail, wenn sie aelter # als 30 Tage sind use strict; use warnings; use File::Spec; ### globale Variablen ##################################################################### my $check_dir = "/tmp/mail"; my $max_age = 30; my $log_dir = '/tmp/logdir'; my $log_file = 'logfile.txt'; my $log_path = File::Spec->join( $log_dir, $log_file ); ### Sub Routinen ##################################################################### sub read_dir { my $dir = shift; return () if !defined $dir; opendir my $dh, $dir or die "$dir: $!\n"; my @entries = # Kriterien koennen sich aendern, daher in einzelnen Schritten grep { -f $_ } # nur Dateien map { File::Spec->join( $dir, $_ ) } # baue Pfad zusammen grep { !m{\A\.\.?\z} } # kein . oder .. readdir $dh; closedir $dh; return @entries; } ### Haupt Programm ##################################################################### my @to_check = read_dir( $check_dir ); open my $logh, '>>', $log_path or die "$log_path: $!\n"; for my $entry ( @to_check ) { if ( -M $entry > $max_age ) { print $logh "$entry ist aelter als $max_age Tage.\n" or die "$log_path: $!\n"; if ( unlink $entry ) { print $logh "\t$entry geloescht.\n"; } else { die "$entry: $!\n"; } } } close $logh or die "$log_path: $!\n"; __END__ ### ENDE ###
my @to_check = read_dir( $check_dir );
Package: libtimedate-perl
use Date::Parse;
1 2 3 4 5
Package: libtimedate-perl use File::stat; use Time::localtime; use Date::Parse; use POSIX;
use Date::Parse;
use File::Spec
Guest hcxWohl ein Certified Microsoft Basic Programmer!? :)Hallo GwenDragon,
nein das wurde mir von meinem "Oberzertifikatschefprogrammierer ;-)" so empfohlen
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 53 54 55 56 57 58 59
#!/usr/bin/perl use warnings; use strict; ############################################################################################################################################ # Skript loescht alle Systemmails die älter als 30 Tage sind durch Vergleich der Zeitstempel## # ############################################################################################ use File::stat; use Time::localtime; use Date::Parse; ########################################################################################################################################## ############################################################################################################################################# my $path ="/var/mail/"; my $mail ="/var/mail/root"; my $log ="/home/uli/logs"; my $logfile =">$log/maillog.txt"; ############################################################################################################################################ my $mail_date_string = ctime(stat($mail)->mtime); # das aktuelle Datum my $time_now = localtime; my $time_file_in_seconds = str2time($mail_date_string); my $time_now_in_seconds = str2time($time_now); my $max_age = 2592000; # 30 Tage in Sekunden ######################################################################################################################################### 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 { my $diff = -M $mail; foreach my $entry (@remove) { if($diff > $max_age) { print LOGFILE "\t mail older than 30 days found \n"; } # END if elsif(unlink $entry) { print LOGFILE "\t delete mail $entry \n"; } # END elsif else { print LOGFILE "\t no mails older than 30 days found \n"; } # END else } # END Foreach } # END sub
1 2 3 4 5 6
my $logfile =">$log/maillog.txt"; # zeile 17 # ... open(LOGFILE, $logfile) or die "Cannot open LOGFILE:$logfile $!\n"; # zeile 32 # ... open(LOGFILE, ">$logfile") or die "Cannot open LOGFILE:$logfile $!\n"; # zeile 37 close LOGFILE; # zeile 38