perl-File :: Find :: Rule仅在顶层排除单个目录

时间:2018-10-21 00:45:21

标签: perl find

我尝试了以下操作以排除目录“ CVS”

my $rule = File::Find::Rule->new;
$rule->or($rule->new->directory->name('CVS')->prune->discard, $rule->new);

但是,这实际上排除了目录树中的所有CVS目录。

这里是一个例子:

  • 源/ CVS(应排除)
  • 源代码/ A / CVS(不应排除)
  • source / B /
  • 源/ C /狗/ CVS(不应排除)

1 个答案:

答案 0 :(得分:2)

您可以使用等效于find dir -wholename dir/CVS -prune -o -print的Perl。

say
   for
      File::Find::Rule
         ->or(
            File::Find::Rule->exec(sub { $_[2] eq "$dir/CVS" })->prune->discard,
            File::Find::Rule->new(),
         )
         ->in($dir);

另一种方法是使用File :: Find :: Rule构建要搜索的目录列表,然后使用File :: Find :: Rule的另一种用法搜索这些目录。 (相当于find ... -print0 | xargs -0 -I{} find {} ...的Perl。)