我想(通过使用 File::Find)首先列出当前目录中的所有文件,然后跳转到子目录。是否可以?
问问题
1697 次
2 回答
8
在进入子目录之前,使用 preprocess 选项对每个目录中的文件进行处理:
use strict;
use warnings;
use File::Find 'find';
find(
{
'wanted' => sub { print "$File::Find::name\n" },
'preprocess' => sub { sort { -d $a <=> -d $b } @_ }
},
'.'
);
虽然为了避免额外的统计数据,它应该是:
sub { map $_->[0], sort { $a->[1] <=> $b->[1] } map [ $_, -d $_ ], @_ }
于 2011-04-18T08:34:09.803 回答
1
进入目录时会调用预处理回调。它可以用于这样的任务:
use File::Find;
my $directory = '.';
find({
wanted => sub {
# do nothing
},
preprocess => sub {
print "$File::Find::dir :\n", join("\n", <*>),"\n\n";
return @_; # no filtering
},
}, $directory);
它打印当前目录名称和其中的文件列表。请注意,preprocess
给定所有用于过滤的目录条目,并且需要返回它们。
于 2011-04-18T08:31:54.420 回答