2016-06-20 3 views
4

私はPerlを使い慣れていません。私は既知のサブフォルダの親フォルダを取得するのにいくつか問題があります。 A、B、C、Dなどのサブフォルダのリストがあります。 これらはすべて、(1,2,3,4などの)ラベルが付いたフォルダに散在していることがわかりますPerl:既知のサブフォルダの親フォルダを見つける方法を教えてください。

だから、このようなことができます:私はちょうど各フォルダを反復処理し、それが直接の親ディレクトリです検索したい 1/ 1/B 2/C 3/D 3/E など

。何か案は?

EDIT:PerlのにPERLを変更:P

+0

私はそこに同じ質問とその答えがあると思います。http://stackoverflow.com/questions/4318769/perl-get-parent-folder-name –

+3

言語の名前は「PERL」ではなく「Perl」です。頭字語ではありません。それは意図的に「Pearl」のスペルミスです。 – ikegami

答えて

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

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

それだけで罰金深いディレクトリを処理します。

$ 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

恐ろしい!ありがとう! FYIと同じように、私がPerlを初めて使う前に言ったように、私は自分のコンピュータにインストールしたPerlのバージョンと関係があるのか​​どうかはわかりませんが、> dir to - >ディレクトリに変更する必要がありましたそれを機能させる。素早い答え池上ありがとう! –

+0

私の間違い。一定。 – ikegami

+0

File :: Find :: Ruleライブラリの使用を予定している他のユーザのメモと同様に、ディレクトリに多数のネストされたフォルダが含まれていると、これは(私の場合と同じように)失敗する可能性が高くなります。 File :: Find :: Ruleは、($ path)フラグで指定したディレクトリに移動するのが難しいようです。私の場合は、私が提供したパスにおよそ10個以上のネストされたフォルダがありました。そうでなければ、それは固い解決策です。私のテストプログラムでは完璧に機能していましたが、私が期待していた実際のシナリオではありません:( –

関連する問題