0
我是Perl新手,我想在特定路徑下grep包含特定子目錄名稱的父目錄。Perl:grep父目錄
輸入:孩子目錄名「childDirName」,幷包含父目錄的路徑「/路徑/ toParentDir /」
輸出:
我已經看過文件的父目錄「parentDir」 ::發現但我很不知所措,因爲我不知道孩子的完整路徑dir/path/toparentDir/parentDir/childDirName。
我是Perl新手,我想在特定路徑下grep包含特定子目錄名稱的父目錄。Perl:grep父目錄
輸入:孩子目錄名「childDirName」,幷包含父目錄的路徑「/路徑/ toParentDir /」
輸出:
我已經看過文件的父目錄「parentDir」 ::發現但我很不知所措,因爲我不知道孩子的完整路徑dir/path/toparentDir/parentDir/childDirName。
我假設你想找到一個包含具有特定名稱的子目錄的目錄名稱。您可以使用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'
@ikegami感謝您的編輯! –
@ikegami當然確實是矯枉過正!更新了答案。 –
非常感謝你的有用的代碼!只是一個簡單的問題,因爲在我的$ rel_dir = $ dir =〜s {^ \ Q $ dir_to_search /} {} r; 正在導致一個合成器錯誤,並刪除它給我$ rel_dir = 1不是名稱。有沒有其他的方式來獲得匹配的名稱,而不是r?您能否評論這一行?非常感謝! – user6388641