2016-05-31 89 views
0

我是Perl新手,我想在特定路徑下grep包含特定子目錄名稱的父目錄。Perl:grep父目錄

輸入:孩子目錄名「childDirName」,幷包含父目錄的路徑「/路徑/ toParentDir /」

輸出:

我已經看過文件的父目錄「parentDir」 ::發現但我很不知所措,因爲我不知道孩子的完整路徑dir/path/toparentDir/parentDir/childDirName。

回答

1

我假設你想找到一個包含具有特定名稱的子目錄的目錄名稱。您可以使用File::Find::Rule做到這一點:

use feature qw(say); 
use strict; 
use warnings; 
use File::Find::Rule; 

my $dir_to_search = '/path/toParentDir'; 
my $dir_to_find = 'childDirName'; 

my @dirs = File::Find::Rule->directory->mindepth(1)->maxdepth(1)->in($dir_to_search); 
for my $dir (@dirs) { 
    if (-d "$dir/$dir_to_find") { 
     my $rel_dir = $dir =~ s{^\Q$dir_to_search/}{}r; 
     say "Parent dir is '$rel_dir'"; 
    } 
} 

例如,如果目錄樹是:

/ 
└── path 
    └── toParentDir 
     ├── parentDir 
     │ └── childDirName 
     └── otherDir 
      └── notChildDirName 

輸出將是:

Parent dir is 'parentDir' 
+0

@ikegami感謝您的編輯! –

+0

@ikegami當然確實是矯枉過正!更新了答案。 –

+0

非常感謝你的有用的代碼!只是一個簡單的問題,因爲在我的$ rel_dir = $ dir =〜s {^ \ Q $ dir_to_search /} {} r; 正在導致一個合成器錯誤,並刪除它給我$ rel_dir = 1不是名稱。有沒有其他的方式來獲得匹配的名稱,而不是r?您能否評論這一行?非常感謝! – user6388641