Sevi: Verzeichnisbaum

Hi Leute,
wie kann ich in Perl VErzeichnisse und Unterverzeichnisse durchsuchen, und alle Dateinamen und Verzeichnisnamen auflisten bzw. in einem Array abspeichern
Ich freue mich auf Antworten
ciao Sevi

  1. hi!

    wie kann ich in Perl VErzeichnisse und Unterverzeichnisse durchsuchen, und alle
    Dateinamen und Verzeichnisnamen auflisten bzw. in einem Array abspeichern

    Kein Problem mit ein bisschen Rekursion:

    === cut ===
    #!/usr/bin/perl

    &subDirs(".");

    sub subDirs
    {
      $Verzeichnis .= "/$_[0]";
      $Verzeichnis =~ s/^///;
      chdir "$_[0]";
      for (<*>)
      {
        print "$Verzeichnis/$_\n" if !-d;
        &subDirs($_) if -d;
        $Verzeichnis =~ s/^/// if -d;
      }
      chdir "..";
      $Verzeichnis = "/" . $Verzeichnis;
      $Verzeichnis =~ s//[^/]*$//;
    }
    === cut ===

    bye, Frank!

  2. Hi Leute,
    wie kann ich in Perl VErzeichnisse und Unterverzeichnisse durchsuchen, und alle Dateinamen und Verzeichnisnamen auflisten bzw. in einem Array abspeichern
    Ich freue mich auf Antworten
    ciao Sevi

    Du kannst es mal mit folgender Routine probieren

    opendir(TEMP, $startverzeichnis);

    $startverzeichnis ist das oberste zu durchsuchende Verzeichnis, welches in diesem Falle mit abschließendem Slash geschrieben werden sollte.

    while ($name = readdir(TEMP))
    {
    if   ($name =~/^.$^..$/) {
      next;
    }
    elsif (-d "$startverzeichnis$name") {
      push @verzeichnisse, $name;
    }
    elsif (-f "$startverzeichnis$name") {
      push @dateien, $name;
    }
    else {
      next;
    }
    }

    durchsucht rekursiv die darunterliegenden Verzeichnisse

    foreach $pfad (@verzeichnisse) {
    opendir(TEMP, "$startverzeichnis$pfad");
    while ($name = readdir(TEMP)) {
      if   ($name=~/^.$^..$/) {
       next;
      }
      elsif (-d "$startverzeichnis$pfad/$name") {
       push @verzeichnisse, "$pfad/$name";
      }
      elsif (-f "$startverzeichnis$pfad/$name") {
       push @dateien, "$pfad/$name";
      }
      else {
       next;
      }
    }
    }