Thread Problem mit Perl Script, welches alte Backupverzeichnisse löschen soll (8 answers)
Opened by Dominik at 2013-08-29 15:34

Linuxer
 2013-08-29 16:23
#169811 #169811
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Ein seltsames Konstrukt verwendest Du da:
Code: (dl )
1
2
3
4
5
6
7
	foreach( my @entry = readdir DIR ){

if( ((stat(@entry))[9]+604800 <= $zeit) ){

$ftp->rmdir(@entry, RECURSE);
}
}


readdir steht hier im Listenkontext und liest daher ALLE Elemente aus.
foreach iteriert über alle Elemente und pro Durchlauf verwendest Du immer noch den Array und damit alle Elemente... Du übergibst also alle gelesenen Elemente an $ftp->rmdir()...

Eine kleines Beispiel zur Verdeutlichung:
Code: (dl )
1
2
3
4
$ perl -wE 'for ( my @aa = ( 1,2,3 ) ) { say "@aa"; }'
1 2 3
1 2 3
1 2 3


Besser wäre schon mal:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
# Lese immer nur einen Eintrag
while ( my $entry = readdir DIR ) {
# . und .. sind zu ignorieren
next if $entry =~ m{^\.\.?$};

if ( (stat($entry))[9]+604800 <= $zeit ) {
# remove $entry and recurse into subdirectories
$ftp->rmdir($entry, 1);
}
}



Nachtrag:

aus Perldoc:Net::FTP:

perldoc Net::FTP
rmdir ( DIR [, RECURSE ])

Remove the directory with the name DIR. If RECURSE is true then rmdir will attempt to delete everything inside the directory.

RECURSE sehe ich hier als Platzhalter und nicht als echt anzugebenes Stichwort. Wenn der Wert an der Stelle wahr ist, dann wird eben versucht, die Inhalte des Verzeichnisses auch zu löschen. Dementsprechend habe ich mein Code-Beispiel angepasst.
Last edited: 2013-08-29 16:37:36 +0200 (CEST)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Problem mit Perl Script, welches alte Backupverzeichnisse löschen soll