Perl File :: Find: сначала перечислить все файлы в каталоге, а затем перейти к следующему каталогу? - PullRequest
3 голосов
/ 18 апреля 2011

Я хочу (используя File :: Find) сначала перечислить все файлы в текущем каталоге, а после этого перейти в подкаталог.Возможно ли это?

Ответы [ 2 ]

8 голосов
/ 18 апреля 2011

Используйте опцию 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 $_ ], @_ }
1 голос
/ 18 апреля 2011

Имеется обратный вызов 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 предоставляется все записи каталога для фильтрации, и они должны быть возвращены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...