![]() |
|< 1 2 >| | ![]() |
13 Einträge, 2 Seiten |
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
Strat+2007-12-23 14:20:49--Nochmals vielen Dank an renée
![]() |
|< 1 2 >| | ![]() |
13 Einträge, 2 Seiten |