Thread Poard: Loeschscript gesucht (12 answers)
Opened by Strat at 2007-12-16 14:03

Strat
 2007-12-23 15:20
#104115 #104115
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
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/

View full thread Poard: Loeschscript gesucht