Perl File::Find:首先列出目录中的所有文件,然后跳转到下一个目录?

3
我想通过使用 File::Find 列出当前目录中的所有文件,然后跳转到子目录。这是否可能?
2个回答

8
使用预处理选项在进入子目录之前对每个目录中的文件进行处理:
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 $_ ], @_ }

1

当进入目录时,会调用preprocess回调函数。它可以用于类似以下的任务:

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 给出了所有目录条目以进行过滤,并且它们需要被返回。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接