Find :: File预处理

时间:2011-04-08 19:16:59

标签: perl

我正在尝试指定一个目录,并递归地查找子目录中的每个文件。在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

1 个答案:

答案 0 :(得分:4)

preprocess函数应返回(可能已修改的)项目列表以进一步检查。在您的示例中,您可以在@_;的末尾添加preprocess以返回未修改的参数。您可以执行grep { $_ !~ /pattern/ } @_之类的操作来过滤掉不需要的内容,依此类推。