2016-06-20 6 views
4

Ich bin neu in Perl und habe Probleme, einen übergeordneten Ordner eines bekannten Unterordners zu bekommen. So habe ich eine Liste von Unterordnern, sagen wir A, B, C, D, etc. Ich weiß, dass sie alle in Ordnern verteilt sind (z. B.), 1, 2, 3, 4 usw.Perl: Wie finde ich einen übergeordneten Ordner eines bekannten Unterordners?

So kann es so aussehen: 1/A 1/B 2/C 3/D 3/E usw.

ich möchte nur durch jeden Ordner iterieren und finden es ist direkt übergeordnete Verzeichnis . Irgendwelche Ideen?

EDIT: Changed PERL Perl: P

+0

Ich denke, es ist die gleiche Frage und die Antwort hier http://stackoverflow.com/questions/4318769/perl-get-parent-folder-name. –

+3

Der Name der Sprache ist "Perl", nicht "PERL". Es ist kein Akronym; es ist eine absichtlich falsche Schreibweise von "Pearl". – ikegami

Antwort

7
use File::Find::Rule qw(); 

my @matches = 
    File::Find::Rule 
     ->name(qw(A B C D)) 
     ->directory 
     ->in('.'); 

Es tief dir Griffe gut.

$ mkdir -p a/b/c/d/e/f/g/h/i/j/k/l 

$ touch a/b/c/d/e/f/g/h/i/j/k/l/file 

$ mkdir -p 0/1/2/3/4/5/6/7/8/9 

$ touch 0/1/2/3/4/5/6/7/8/9/file 

$ perl -MFile::Find::Rule -E'say for File::Find::Rule->in(".")' 
. 
a 
a/b 
a/b/c 
a/b/c/d 
a/b/c/d/e 
a/b/c/d/e/f 
a/b/c/d/e/f/g 
a/b/c/d/e/f/g/h 
a/b/c/d/e/f/g/h/i 
a/b/c/d/e/f/g/h/i/j 
a/b/c/d/e/f/g/h/i/j/k 
a/b/c/d/e/f/g/h/i/j/k/l 
a/b/c/d/e/f/g/h/i/j/k/l/file 
0 
0/1 
0/1/2 
0/1/2/3 
0/1/2/3/4 
0/1/2/3/4/5 
0/1/2/3/4/5/6 
0/1/2/3/4/5/6/7 
0/1/2/3/4/5/6/7/8 
0/1/2/3/4/5/6/7/8/9 
0/1/2/3/4/5/6/7/8/9/file 
+0

Super! Vielen Dank! Wie schon gesagt, ich bin neu bei Perl, also bin ich mir nicht sicher, ob dies mit der Version von Perl zu tun hat, die ich auf meinem Computer installiert habe, aber ich musste ändern -> Verzeichnis nach -> Verzeichnis damit es funktioniert. Danke für die schnelle Antwort ikegami! –

+0

Mein Fehler. Fest. – ikegami

+0

Nur als Hinweis für andere Benutzer, die die Datei :: Find :: Rule-Bibliothek verwenden möchten, wird dies höchstwahrscheinlich fehlschlagen (wie in meinem Fall), wenn Ihre Verzeichnisse viele verschachtelte Ordner enthalten. File :: Find :: Rule scheint Probleme zu haben, in das Verzeichnis zurückzugehen, das ich in -> in ($ path) flag angegeben habe. In meinem Fall hatte ich zufällig etwa 10 verschachtelte Ordner in dem von mir bereitgestellten Pfad. Ansonsten ist es eine solide Lösung. Es funktionierte perfekt in meinem Testprogramm, nur nicht in dem tatsächlichen Szenario, auf das ich gehofft hatte ... :( –

Verwandte Themen