[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