【问题标题】:excluding root/base directory from an array using File::Find::Rule使用 File::Find::Rule 从数组中排除根目录
【发布时间】:2016-03-18 05:25:09
【问题描述】:

我正在尝试使用 File::Find::Rule 读取子目录,但我的代码也在打印/读取基本目录以及子目录。如何更正使用 cvs 示例 (http://search.cpan.org/~rclamp/File-Find-Rule-0.34/lib/File/Find/Rule.pm) 方法,该方法已在一些类似帖子中进行了解释。我的代码看起来像 -

 use File::Find::Rule;
my $directory = './test_dir/';
my $rule = File::Find::Rule->new; $rule -> or($rule ->new
        -> directory
        ->name('test_dir')
        ->prune
        ->discard,
          $rule->new);
my @subdirs = $rule->in($directory);

它仍然在@subdir 中列出 ./test_dir。

【问题讨论】:

    标签: perl file-handling


    【解决方案1】:

    您可以使用grep 排除搜索目录。

    my @subdirs = grep { $_ ne $directory } $rule->in($directory);
    

    在这种情况下,您将不得不更改 $directory 的内容以匹配 File::Find 的输出方式。没有尾部斜杠,也没有前导 ./。只需使用名称或直接相对路径即可。

    my $directory = 'test_dir';   
    my $other_dir = 'foo/bar/baz'; # multi-level depths would look like this
    

    【讨论】:

    • 非常感谢@simbabque,只有一个问题 - 为什么会有一个新变量 $other_dir?
    • @B_perl 这只是我的示例,如果您有一个深度为多个目录的路径,它会是什么样子。你不需要那个变量。但是,如果我在答案中将两个示例都放在一个代码块中,我希望它是 语法正确 Perl。
    • 完美运行!谢谢@simbabque..对不起,我只是仔细检查以防我错过了什么。
    • 没问题。检查总是更好。 :)
    • @B 我刚刚意识到您可能从我两年前写的答案中复制了该代码,但我不记得了。小世界。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    相关资源
    最近更新 更多