我在数组中有一组目录为
chdir /tmp;
my @dir=("test" "abc" "def")
我正在寻找一种方法,使用File :: Find :: Rule来查找/ tmp 递归中的所有文件,但不包括@dir中的文件。
我可以通过
从@dir获取所有文件my $rule = File::Find::Rule->new;
$rule->file;
my @files = $rule->in( @dir );
但我不能否定这个条件,即排除@dir。我在尝试
chdir /tmp;
@files = File::Find::Rule->new
->file()
->name(@dir)
->prune
->in( "." );
但没有输出。
答案 0 :(得分:7)
documentation列出了这个例子:
忽略CVS目录
my $rule = File::Find::Rule->new; $rule->or($rule->new ->directory ->name('CVS') ->prune ->discard, $rule->new);
请注意这里使用空规则。空规则匹配他们看到的任何内容,因此效果是匹配(和丢弃)名为' CVS'或匹配任何东西
你可以probalby做同样的事情:
my @exclude_dirs = qw(test abc def);
my $rule = File::Find::Rule->new;
$rule->or($rule->new
->directory
->name(@exclude_dirs)
->prune
->discard,
$rule->new);
my @files = $rule->in('/tmp');
考虑这个例子:
foo@bar:~/temp/filefind> tree
.
├── bar
│ ├── bar.txt
│ └── foobar.txt
├── baz.txt
└── foo
└── foo.txt
2 directories, 4 files
以下是代码:
#!/usr/bin/perl
use strictures;
use File::Find::Rule;
use Data::Dump;
my @exclude_dirs = qw(foo);
my $rule = File::Find::Rule->new;
$rule->or($rule->new
->directory
->name(@exclude_dirs)
->prune
->discard,
$rule->new);
my @files = $rule->in('filefind');
dd \@files;
现在我运行这个:
foo@bar:~/temp> perl file-find.pl
[
"filefind",
"filefind/baz.txt",
"filefind/bar",
"filefind/bar/bar.txt",
"filefind/bar/foobar.txt",
]