3

(File::Find を使用して) 最初に現在のディレクトリ内のすべてのファイルを一覧表示し、その後サブディレクトリにジャンプしたい。出来ますか?

4

2 に答える 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 $_ ], @_ }
于 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 に答える