使用Perl模块File :: Find :: Rule查找匹配的文件

时间:2015-10-09 19:49:38

标签: perl

我试图使用File::Find::Rule模块在​​子目录中查找特定文件(output.txt),如果不存在,则在根目录中搜索是否存在。问题是存在多个output.txt文件,因此如果找不到原始文件,我们应该只查找其他文件。

基本上,目录结构如下所示

top
    level-1-a
        level-2-a
            output.txt
        level-2-b
            output.txt
    level-1-b
        level-2-a
            output.txt
        level-2-b
            output.txt

现在我有:

    @files = File::Find::Rule->file()->name($output)->in($sub_dir);

    if ( ! @files ) {
        @files = File::Find::Rule->file()->name($output)->in($root_dir);
    }

行为在哪里,我们首先在\top\level-1-a中查找output.txt,在level-2-alevel-2-b中找到匹配项。如果level-1-a下没有匹配的文件,我们会在\top上进行相同的调用,以查找level-1-b目录中显示的匹配项。有没有更简洁的方法来检查“if-else”的想法?

1 个答案:

答案 0 :(得分:0)

我会一次检查一个子目录。这是一个例子。只要找到包含所需文件的子目录,last就会突然发现for循环

my @files;

for my $subdir ( 'level-1-a', 'level-1-b' ) {
    last if @files = File::Find::Rule->file()->name($output)->in("/top/$subdir");
}