tag:forum.selfhtml.org,2005:/selfverzeichnisstruktur durchsuchen mit perl – SELFHTML-Forum1999-03-05T22:20:00Zhttps://forum.selfhtml.org/self/1999/mar/1/verzeichnisstruktur-durchsuchen-mit-perl/9927#m9927Fabian Haeusler1999-03-01T08:50:00Z1999-03-01T08:50:00Zverzeichnisstruktur 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#m9928Rolf1999-03-01T11:27:00Z1999-03-01T11:27:00Zverzeichnisstruktur 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#m9929Don1999-03-05T22:20:00Z1999-03-05T22:20:00Zverzeichnisstruktur 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>