[Vienna-pm] Problem mit rewinddir
Baier Oliver MAX SD
BaierO at spardat.at
Tue Oct 14 08:10:12 CDT 2003
Hi,
ich durchsuche rekursiv bestimmte Verzeichnisse und loesche
deren Unterverzeichnisse, wenn diese nicht auf einer "Liste"
stehen oder Dateien enthalten.
Irgendwie scheint rewinddir nicht ganz so zu funktionieren,
wie ich es mir vorstelle.
Meine Subroutine lautet:
sub cleandir {
my ($countref, $dir) = @_;
my $deleteflag = 1;
opendir DIR, $dir or warn "open-error bei $dir: $!\n";
foreach ( grep -d, map "$dir/$_", grep !/^\.\.?$/, readdir DIR ) {
$deleteflag *= cleandir($countref, $_);
}
# rewinddir DIR;
closedir DIR;
opendir DIR, $dir or warn "open-error bei $dir: $!\n";
my $files = grep -f, map "$dir/$_", readdir DIR;
closedir DIR;
if ($deleteflag && !$files && !exists $templates{$dir}) {
print "loesche $dir ($files Dateien)\n";
#rmdir $dir or warn "delete-error bei $dir: $!\n";
$$countref++;
return 1;
} else {
print "verschone $dir ($files Dateien)\n";
}
return 0;
}
und fuehrt (mit open&close) zum Ergebnis:
| loesche /data/apache_entw_dev/newsroom/images/no_a_dir (0 Dateien)
| loesche /data/apache_entw_dev/newsroom/images/nr_banner_aboservice_neu.gif (0 Dateien)
| verschone /data/apache_entw_dev/newsroom/images/und_a_dir_mit_feus (2 Dateien)
| loesche /data/apache_entw_dev/newsroom/images/und_no_ans_ohne (0 Dateien)
| verschone /data/apache_entw_dev/newsroom/images (52 Dateien)
wenn ich allerdings rewinddir statt open&close verwende,
erhalte ich ein falsches Ergebnis:
| loesche /data/apache_entw_dev/newsroom/images/no_a_dir (0 Dateien)
| loesche /data/apache_entw_dev/newsroom/images/nr_banner_aboservice_neu.gif (0 Dateien)
| verschone /data/apache_entw_dev/newsroom/images/und_a_dir_mit_feus (2 Dateien)
| loesche /data/apache_entw_dev/newsroom/images/und_no_ans_ohne (0 Dateien)
| verschone /data/apache_entw_dev/newsroom/images (0 Dateien)
Das uebergebene Verzeichnis ".../images" wird in diesem Fall zwar
trotzdem verschont, weil's berechtigte Unterverzeichnisse erhaelt,
aber die Anzahl der Dateien ist falsch.
Warum?
lg
Oliver
More information about the Vienna-pm
mailing list