0

構成ファイルを読み取って、ファイルに記載されているサイズでそこにリストされているディレクトリを破棄しようとしています。これまでのところ、私はこれを持っています-

    open FILE, 'C:\reports\config.txt' or die $!;
my $size_req;
my $path;
my $sub_dir;
my $count;

my @lines = <FILE>;   
foreach $_ (@lines) 
{   



    my @line = split /\|/, $_; 

    if ($line[0] eq "size")
    {
        $size_req= $line[1];
        $size_req= ">".$size_req*1024;;

    }

    if ($line[0] eq "path")
    {
        $path= $line[1];

    }

    if ($line[0] eq "directories")
    {   my $aa;
        my $siz_two_digit;
        my $sub_dir;
        my $i;
        my $array_size=@line;
        **for($i=1; $i < $array_size; )**
        { 
        $sub_dir=$line[$i]; 
        print $sub_dir;
        print "\n";
        print $path;
                     print "\n";
        my $r1  =  File::Find::Rule->directory
                           ->name($sub_dir)
                           ->prune          # don't go into it
                           ->discard;       # don't report it

                my $fn  =  File::Find::Rule->file
                                       ->size( $size_req );

                           my @files  =  File::Find::Rule->or( $r1, $fn )
                                             ->in( $path);

                     print @files;
                    undef @files;
                      print @files;
                     $i++;
                     print "\n";
                     print "\n";
        }
    }

}

for ループの問題は、配列から破棄されるすべてのサブディレクトリを問題なく格納することです。ただし、破棄する最初のディレクトリの名前を読み取ると、残りのサブディレクトリを認識せず、それらも一覧表示します。2 番目の値に移動すると、前の値は無視され、それもリストされます。

File|::Find::Rule が一度に配列を取り、コードが構成ファイルの行全体を一度に考慮するかどうかを知っている人はいますか? または他のロジック?

ありがとうございました

4

1 に答える 1

0

このコードはあなたが思っていることをしません:

my $r1  =  File::Find::Rule->directory
                   ->name($sub_dir)
                   ->prune          # don't go into it
                   ->discard;       # don't report it

ルールをスカラーに格納しようとしていますが、実際に行っているのは、Find::File::Rule を呼び出して、結果のリストを整数 (リスト内の要素の数) に変換し、それを $r1 に格納することです。

呼び出し全体を @files 呼び出しに入れるだけです。面倒に見えるかもしれませんが、はるかにうまく機能します。

于 2012-07-07T13:58:33.127 に答える