[Vienna-pm] WG: find in several directories

Baier Oliver oliver.baier at lotterien.at
Wed Feb 20 01:26:10 PST 2008


Hi,

(war gestern unterwegs - deshalb erst jetzt die AW)

> -----Ursprüngliche Nachricht-----
> Von: vienna-pm-bounces+oliver.baier=lotterien.at at pm.org 
> [mailto:vienna-pm-bounces+oliver.baier=lotterien.at at pm.org] 
> Im Auftrag von Peter J. Holzer
> Gesendet: Dienstag, 19. Februar 2008 11:13
> An: vienna-pm at pm.org
> Betreff: Re: [Vienna-pm] WG: find in several directories
> 
> Das ist aber in der allgemeinen Form Deines Problems (finde alle
> Directories, deren Pfad eine Regex R1 matcht, und darin alle Files,
> deren Name eine Reges R2 matcht) unvermeidlich. Deine Regex
> qr{/content/nemat/parts/\d+/tid\d*} matcht übrigens auch 
> "/tmp/foo/content/nemat/parts/7/tid/bar/gazonk",

Wenn man nur die regex betrachtet, hast du Recht. Im Proggi selbst
werden aber alle übergebenen Pattern mit ^ und $ versehen - damit
spare ich mir einfach den Aufwand dafür zu sorgen, dass die Anchors
bei allen übergebenen Pattern schon vorhanden sein müssen.

> Im konkreten Fall würde ich das wegen der bekannten Anzahl Levels von
> Hand lösen:
> 
> level1('/content/nemat/parts/');
> 
> sub level1 {
>     my ($d) = @_;
>     opendir(my $dh, $d) or return;
>     for (grep { /^\d+$/ } readdir($dh)) {
> 	level2("$d/$_");
>     }
> }
>
> ...
> 
> (man kann auch die drei Loops ineinanderschachteln, aber kurze Subs
> finde ich übersichtlicher).

Die Idee ist ein guter Ansatz.
Da ich aber weder eine bekannte Anzahl von Levels noch eine gleich tief
verzweigte Struktur habe, muss diese rekursive sub allerdings noch
etwas ausgebaut werden. Genau um mir diesen Aufwand zu ersparen habe
ich auf ein bestehendes Modul gehofft.
( Neben '/content/nemat/parts/\d+/tid\d*' kann z.B. auch
'/content/export/trace\d+/\d+\.txt' übergeben werden.)


> > Ich stelle mir vor, dass es irgendwo ein Pendant zu 'ls' gibt.
> 
> ls sucht auch nur rekursiv durch. Falls Du das Pendent zum Shell
> Globbing meinst, das gibt es auch in Perl und heißt glob.
> 
> > Die Perl-regexen in der Schnittstelle kann man auch zu [0-9] & Co
> > umwandeln lassen.
> 
> Wenn Du mit "[0-9] & Co" Globs meinst, hast Du das Problem wesentlich
> vereinfacht, weil die sehr viel einfacher als Regex sind.

jop; leider ist die Komplexität auch der Grund, warum ich zuerst regexes
wollte... da hat man einfach alle Optionen offen.

Nachdem's nix fertiges gibt, werd ich mir noch kurz den Kopf darüber
zerbrechen, ob sich die rekursiven sub lohnt oder ich doch auf Wildcards
umsteigen muss.

Vielen Dank,
Oliver


> 	hp
> 
> -- 
>    _  | Peter J. Holzer    | It took a genius to create [TeX],
> |_|_) | Sysadmin WSR       | and it takes a genius to maintain it.
> | |   | hjp at hjp.at         | That's not engineering, that's art.
> __/   | http://www.hjp.at/ |	-- David Kastrup in comp.text.tex
> 


More information about the Vienna-pm mailing list