2016-05-31 88 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