Thread Dateien nach 14 tagen löschen (20 answers)
Opened by mobas at 2004-02-16 15:31

coax
 2004-02-16 18:20
#80089 #80089
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Eine einfach/kurze Moeglichkeit mit den Dateitest-Operatoren -M und -A:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@files = <*>;


foreach my $file (@files) {
   
   # loeschen wenn Datei vor 14 Tagen das letzte mal...
   
   # modifiziert
   unlink($file) if -M $file >= 14;
   
   # darauf zugegriffen
   # unlink($file) if -A $file >= 14;
   
}


Den Zeitstring koenntest du so in ein Epoche-Sekunden-Timestamp umwandeln:

Code: (dl )
1
2
3
4
5
6
7
my $filename = 'name.20040215135523';

my($tstr) = $filename =~ /\.(\d+)$/;

my(@date) = unpack("A4A2A2A2A2A2", $tstr);

printf("%02d:%02d:%02d %02d.%02d.%04d\n", @date[3,4,5,2,1,0]);


um dann wie folgt zu errechnen ob die Datei das Alter erreicht hat und geloescht werden kann:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use Time::Local;

my $filename = 'name.20040215135523';

my $days = 14;

my $delta_secs =  86400 * $days;

my($datestr) = $filename =~ /\.(\d+)$/;

my(@date) = unpack("A4A2A2A2A2A2", $datestr);

my($date_epocs) = timelocal(@date[5, 4, 3, 2], $date[1] - 1, $date[0] - 1900);

if ((time() - $date_epocs) >= $delta_secs) {
  printf("Datei aelter als %d Tage.\n", $days);
 
  # Datei loeschen
}


Die Variante mit den Dateitest-Operatoren (-M & -A) solltest du nicht verwenden wenn dein Skript laengere Zeit laeuft, deren Ergebnis orientiert sich naemlich nach den Zeitpunkt an dem das Skript gestartet wurde (wenn ich mich nicht irre).

Quote
von renee
Code: (dl )
my $stop_date = ((localtime(time))[5] + 1900).sprintf("%02d",((localtime(time))[4] + 1)).sprintf("%02d",(localtime(time))[3]);

ein sprintf  haett's auch getan ;)

Gruss Christian.
,,Das perlt aber heute wieder...'' -- Dittsche

View full thread Dateien nach 14 tagen löschen