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