【问题标题】:Finding matching files with Perl module File::Find::Rule使用 Perl 模块 File::Find::Rule 查找匹配文件
【发布时间】:2015-10-09 19:49:38
【问题描述】:

我正在尝试使用 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”的想法?

【问题讨论】:

  • 听起来你想获取某个顶级目录下所有匹配文件的列表,对它们进行排序,然后只保留第一个元素。
  • 如果 $subdir 非常大,您可以避免第二次搜索树的那部分以加快速度。否则,你所拥有的对我来说看起来不错。

标签: perl


【解决方案1】:

我会一次检查一个子目录。这是一个例子。只要找到包含所需文件的子目录,last 就会立即跳出 @9​​87654322@ 循环

my @files;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多