Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12732[/thread]

Backup von Dateien als Cronjob



<< >> 7 Einträge, 1 Seite
cbxk1xg
 2008-11-07 15:44
#116059 #116059
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
Hallo Freund der Sonne,

ich möchte mit einem Perl-Skript einen Cron-Job bauen, der Dateien nach Alter verschiebt und auch andere sogar löscht. Es ist allerdings ausdrücklich gewünscht, dass nicht das Dateialter sondern ein Timestamp aus dem Namen der Datei dafür benutzt wird. Mit -M wäre es zwar einfacher, aber was soll's.

Ich habe hunderte Dateien nach folgendem Schema: "20081201BlaFasel.xyz". Diese Dateinamen wollte ich nun in einer Schleife zerlegen um den Timestamp zu extrahieren:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
use strict; # wie immer
use warnings; # wie immer

for my $file (@Files)
{
my $TimeStampFromFile   = substr($file,0,8);
my $YearFromFile        = substr($file,0,4);
my $MonthFromFile       = substr($file,3,2);
my $DayFromFile         = substr($file,5,2);
}


Jetzt kann ich mit
Code (perl): (dl )
my $Today = strftime("%Y%m%d",localtime(time));
zwar das aktuelle Datum herausfinden, aber wie errechne ich die Differenz? Die Dateien sollen mindestens 30 Minuten alt sein, bevor sie verschoben werden oder vom vorherigen Tag sein (Datumsgrenze).

Die zu löschenden Dateien sollen alle mindestens älter als 90 Tage sein.

Das löschen (unlink) bekomme ich hin. Aber ich weiß nicht, wie ich die Differenz mit dem Timestamp errechnen kann.
GwenDragon
 2008-11-07 16:04
#116060 #116060
User since
2005-01-17
14533 Artikel
Admin1
[Homepage]
user image
Zum Berechnen von Datum-/Zeitunterschieden benutze CPAN:Date::Calc
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

renee
 2008-11-07 16:15
#116061 #116061
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl

use strict;
use warnings;
use DateTime;

use constant SECONDS_PER_DAY => 24 * 60 * 60;

my $filename = "20080112BlaFasel.xys";
my ($year,$month,$day) = $filename =~ /(\d{4})(\d\d)(\d\d)/;

my $diff = DateTime->new( year => $year, month => $month, day => $day )
                   ->subtract_datetime_absolute( DateTime->now );

print $diff->seconds / SECONDS_PER_DAY;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
cbxk1xg
 2008-11-07 16:24
#116062 #116062
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
Oh man, tolle Wurst! Das Modul ist ja riesig! Da gibt es tausend und eine Möglichkeit. :-(
cbxk1xg
 2008-11-07 16:52
#116064 #116064
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
Ich habe mir das Moldul Date::Calc angesehen und ich denke, es ist das was ich brauche. Aber ich verstehe es immer noch nicht so ganz. Kann mir jemand einen Denkanstoß geben?
renee
 2008-11-07 16:55
#116065 #116065
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Schau Dir mal die Funktion Delta_Days an...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
cbxk1xg
 2008-11-07 21:12
#116075 #116075
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
Danke. Ich denke ich hab's jetzt.
<< >> 7 Einträge, 1 Seite



View all threads created 2008-11-07 15:44.