tag:forum.selfhtml.org,2005:/self verzeichnisstruktur durchsuchen mit perl – SELFHTML-Forum 1999-03-05T22:20:00Z https://forum.selfhtml.org/self/1999/mar/1/verzeichnisstruktur-durchsuchen-mit-perl/9927#m9927 Fabian Haeusler 1999-03-01T08:50:00Z 1999-03-01T08:50:00Z verzeichnisstruktur durchsuchen mit perl <p>Ich habe ein kleines perl Programm geschrieben mit dessen Hilfe man eine Datei als textfile einliest, beliebige Daten (z.B. eine e-mail Adresse) aendert, und dann wieder in dem gleichen Format abspeichert. Meine Anwendung bezieht sich auf das Aendern des gleichen Textstring auf ca. 250 Seiten. Leider sind diese Seiten nicht alle im gleichen Verzeichnis und deshalb muss ich die Datei erst in jedes Unterverzeichnis kopieren und dann erneut ausfuehren. Gibt es eine Moeglichkeit mit perl alle Verzeichnisse die unterhalb des Startverzeichisses liegen zu durchsuchen und die Aenderungen vorzunehmen.</p> <p>Danke!</p> https://forum.selfhtml.org/self/1999/mar/1/verzeichnisstruktur-durchsuchen-mit-perl/9928#m9928 Rolf 1999-03-01T11:27:00Z 1999-03-01T11:27:00Z verzeichnisstruktur durchsuchen mit perl <blockquote> <p>Ich habe ein kleines perl Programm geschrieben mit dessen Hilfe man eine Datei als textfile einliest, beliebige Daten (z.B. eine e-mail Adresse) aendert, und dann wieder in dem gleichen Format abspeichert. Meine Anwendung bezieht sich auf das Aendern des gleichen Textstring auf ca. 250 Seiten. Leider sind diese Seiten nicht alle im gleichen Verzeichnis und deshalb muss ich die Datei erst in jedes Unterverzeichnis kopieren und dann erneut ausfuehren. Gibt es eine Moeglichkeit mit perl alle Verzeichnisse die unterhalb des Startverzeichisses liegen zu durchsuchen und die Aenderungen vorzunehmen.</p> <p>Danke!</p> </blockquote> <p>Hallo,<br> die folgende Funktion (gefunden bei www.rootshell.com) legt einmal ein array mit Dirs und zum anderen ein array mit txt-Files an (durch den rekursiven Auffruf werden alle SubDirs abgearbeitet):</p> <p>sub traverse {<br>     local($dir) = shift;<br>     local($path);<br>     unless (opendir(DIR, $dir)) {<br> warn "Can't open $dir\n";<br> closedir(DIR);<br> return;<br>     }<br>     foreach (readdir(DIR)) {<br> next if $_ eq '.' || $_ eq '..';<br> $path = "$dir/$_";<br> if (-d $path) {  # a directory<br>   # dirs als Array anlegen<br>   push(@dirs, $path);<br>      &traverse($path);<br> } elsif (-f _) { # a plain file<br>      # print "$path<br>\n";<br>      # or do something you want to<br>   # ich werde ein Array anlegen<br>   if(/.txt/i){push (@files, $path);}<br> }<br>     }<br>     closedir(DIR);<br> }</p> <p>I.d. Hoffnung, das Richtige gefunden zu haben...<br> Viele Grüße, Rolf</p> https://forum.selfhtml.org/self/1999/mar/1/verzeichnisstruktur-durchsuchen-mit-perl/9929#m9929 Don 1999-03-05T22:20:00Z 1999-03-05T22:20:00Z verzeichnisstruktur durchsuchen mit perl <blockquote> <p>Hallo,<br> die folgende Funktion (gefunden bei www.rootshell.com) legt einmal ein array mit Dirs und zum anderen ein array mit txt-Files an (durch den rekursiven Auffruf werden alle SubDirs abgearbeitet):</p> <p>sub traverse {<br>     local($dir) = shift;<br>     local($path);<br>     unless (opendir(DIR, $dir)) {</p> </blockquote> <p>»»  warn "Can't open $dir\n";<br> »»  closedir(DIR);<br> »»  return;</p> <blockquote> <p>}<br>     foreach (readdir(DIR)) {</p> </blockquote> <p>»»  next if $_ eq '.' || $_ eq '..';<br> »»  $path = "$dir/$_";<br> »»  if (-d $path) {  # a directory</p> <blockquote> <p># dirs als Array anlegen<br>   push(@dirs, $path);<br>      &traverse($path);</p> </blockquote> <p>»»  } elsif (-f _) { # a plain file</p> <blockquote> <p># print "$path<br> \n";<br>      # or do something you want to<br>   # ich werde ein Array anlegen<br>   if(/.txt/i){push (@files, $path);}</p> </blockquote> <p>»»  }</p> <blockquote> <p>}<br>     closedir(DIR);<br> }</p> </blockquote> <p>Es geht auch einfacher:</p> <p>Die Funktion 'find' ruft für alle Files in den angegebenen Verzeichnissen (incl. der jeweiligen Unterverzeichnisse) die funktion 'function' auf. Dort können dann die Modifikationen an den Files vorgenommen werden.</p> <p>use File::Find;<br> find(&function, $path1, $path2, ...);<br> sub function { ... }</p>