perl - File :: Find :: Rule для исключения одного dir только для верхнего уровня - PullRequest
0 голосов
/ 21 октября 2018

Я попробовал следующее, чтобы исключить каталог 'CVS'

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

Но, тем не менее, это фактически исключает любые каталоги CVS, которые находятся внутри дерева каталогов.

Вот пример:

  • источник / CVS (следует исключить)
  • источник / A / CVS (не следует исключать)
  • источник / B /
  • источник/ C / собака / CVS (не следует исключать)

1 Ответ

0 голосов
/ 21 октября 2018

Вы можете использовать Perl-эквивалент find dir -wholename dir/CVS -prune -o -print.

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.(Perl эквивалент find ... -print0 | xargs -0 -I{} find {} ....)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...