我正在尝试指定一个目录,并递归地查找子目录中的每个文件。在find
chdir进入目录之后,我想在find
读取文件之前进行一些处理。这是一个简化的片段,演示了这个问题。它没有递归到子目录中,但看起来应该如此。我可以验证子目录和文件是否存在,因为如果我在没有预处理键的情况下调用find
,那么我就会获得列表。我没有长时间使用Perl所以我有点难过。
find({
wanted => \&wanted,
preprocess => \&preprocess
}, "/home/nelson/invoices/");
# function definitions
sub wanted {
print "Calling wanted...\n";
print "\t" . $File::Find::name . "\n";
}
sub preprocess{
print "Calling preprocess...\n";
print "\t" . $File::Find::dir . "\n";
}
这是输出。
Calling wanted...
/home/nelson/invoices
Calling preprocess...
/home/nelson/invoices
Calling wanted...
/home/nelson/invoices/1
答案 0 :(得分:4)
preprocess
函数应返回(可能已修改的)项目列表以进一步检查。在您的示例中,您可以在@_;
的末尾添加preprocess
以返回未修改的参数。您可以执行grep { $_ !~ /pattern/ } @_
之类的操作来过滤掉不需要的内容,依此类推。