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

Dateien nach 14 tagen löschen

Leser: 2


<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
mobas
 2004-02-16 15:31
#80081 #80081
User since
2004-02-11
19 Artikel
BenutzerIn
[default_avatar]
hi leute,

hat jemand n tip wie man unter perl dateien zum beispiel nach 14 tagen löschen kann?
die dateien sehen ungefähr so aus:
name.20040215135523
das nach dem punkt ist das erstelldatum der datei und gleichzeitig die dateiendung.
wie mach ich das nun das diese datei nach 14 tagen gelöscht wird?
hab derzeit kein plan wie man bei diesem datetime 14 tage oder mehr abzieht.
die dateiendung kann nicht geändert werden das sie wom server so automatisch erstellt wird.

vielen dank schon mal im voraus!

mfg mobas
renee
 2004-02-16 15:41
#80082 #80082
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
my $filename = 'name.2004021535523';
my ($date) = $filename =~ m/\.(\d{8})\d+$/;
my $stop_date = ((localtime(time))[5] + 1900).sprintf("%02d",((localtime(time))[4] + 1)).sprintf("%02d",(localtime(time))[3]);
if($stop_date - $date > 14){
unlink $filename;
}
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/
[E|B]
 2004-02-16 16:13
#80083 #80083
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Wobei natürlich vorrausgesetzt wird, dass das SCript auch jeden Tag min. einmal aufgerufen wird. Sonst hat das ganze wenig Sinn. ;)
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Crian
 2004-02-16 16:17
#80084 #80084
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Soll man sich den auf den Timestamp in der Endung verlassen? Oder sollte man vielleicht lieber die last modification time ermittlen?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
renee
 2004-02-16 17:09
#80085 #80085
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[E|B
,16.02.2004, 15:13]Wobei natürlich vorrausgesetzt wird, dass das SCript auch jeden Tag min. einmal aufgerufen wird. Sonst hat das ganze wenig Sinn. ;)

Warum?? ich frage ja > 14 und nicht == 14 ab. Das heißt, dass eine Datei, die 21 Tage alt ist, auch gelöscht wird...

Aber man kann ja eh einen Cronjob einrichten...
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/
esskar
 2004-02-16 17:14
#80086 #80086
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ich setze das datum bei solchen dateien immer auf das datum, an dem sie glöscht werden sollen - also in die Zukunft.
Ich hatte auch mal einen grund dafür, kann mich aber nicht mehr erinnern wie der war!
renee
 2004-02-16 17:17
#80087 #80087
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=mobas,16.02.2004, 14:31]die dateiendung kann nicht geändert werden das sie wom server so automatisch erstellt wird.[/quote]
@esskar: scheint hier nicht möglich zu sein...
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/
Crian
 2004-02-16 18:06
#80088 #80088
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Ich glaube Esskar meint die modification time, nicht die Dateiendung.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
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
[E|B]
 2004-02-16 21:38
#80090 #80090
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
@renee

Woher soll das Script denn wissen, dass es diese Dateien zu löschen hat, wenn es nicht ausgeführt wird? ;)
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2004-02-16 15:31.