Thread Poard: Loeschscript gesucht
(12 answers)
Opened by Strat at 2007-12-16 14:03
so, das script ist aktiv und wird automatisch nach dem backup ausgefuehrt. Ich habe ein paar unwesentliche aenderungen gemacht, die mir das debuggen erleichtert haben.
Nochmals vielen Dank an renée 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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 #! /usr/bin/perl use strict; use warnings; use Date::Calc qw(Add_Delta_Days Add_Delta_YM Today); use File::Spec; use File::Basename (); use POSIX; use FindBin; my $doDelete = 1; my $directory = File::Spec->catdir( qw[ / sc backup] ); my $bin = File::Basename::basename( $0 ); my $logfile = File::Spec->catfile( $FindBin::Bin, "$bin.log" ); my @files = _get_filenames( $directory ); @files = _clean_list( @files ); getFreeSpace( $logfile ); _delete_files( $directory, $logfile, @files ); getFreeSpace( $logfile ); ### # Subroutines ### sub _get_filenames{ my ($dir) = @_; opendir my $dirh, $dir or die $!; my @files = grep{ /^\w+\_\d{8}-\d{6}\.tar\.gz$/ }readdir $dirh; closedir $dirh; return @files; } sub _clean_list{ my @files = @_; my @dates; my @today = Today(); # keep today's files push @dates, sprintf "%04d%02d%02d", @today; # keep files of 5 last days for (1..4) { push @dates, sprintf "%04d%02d%02d", Add_Delta_Days( @today, $_ * -1 ); } # keep files of 11th, 21st of the last 6 months for (0..5){ my ($year,$month,$day) = Add_Delta_YM( @today, 0, $_ * -1 ); for( 11, 21 ){ push @dates, sprintf "%04d%02d%02d", $year,$month, $_; } } # filter filenames @files = grep{ my ($f) = $_ =~ /^\w+\_(\d{8})/; !( grep{ $f == $_ }@dates or $f =~ /01$/ ) }@files; } sub _delete_files{ my ($dir,$log,@files) = @_; open( my $fh_log, '>>', $log ) or die $!; for my $file ( sort @files ){ my $time = POSIX::strftime( '%Y%m%d-%H%M%S', localtime); my $fqfn = File::Spec->catfile( $dir, $file ); if( $doDelete ) { unlink $fqfn and print $fh_log $time,"\t",$file,"\n"; } # if else { print "Simulate: file '$file' would have been deleted\n"; } } close $fh_log; } # _delete_files sub getFreeSpace { my( $log ) = @_; my @space = `df -k`; open( my $fh_log, '>>', $log ) or die $!; print $fh_log "\n# Free space:\n"; foreach my $line ( @space ) { print $fh_log "# $line"; } close $fh_log; } # getFreeSpace perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/ |