使用*和_使用$ File :: Find :: dir计算目录中的文件

时间:2015-04-27 07:34:58

标签: perl perlscript

您好我想使用下面的代码计算特定目录的大小,但我想搜索字符串为DIR0 *以列出名为DIR01,DIR02的所有目录。我该如何实现呢?

if ($File::Find::dir =~ m/^(.*)$search/) {
$size += -s ;
}

1 个答案:

答案 0 :(得分:-1)

更新时间:2015-04-27-17:25:24 这就是生成正则表达式的正则表达方式

$ perl -e"use Text::Glob qw/ glob_to_regex /; print glob_to_regex(qw/ thedir0* /);
(?^:^(?=[^\.])thedir0[^/]*$)

这就是你在程序中使用它的方式

use Text::Glob qw/ glob_to_regex /;
my $searchRe = glob_to_regex(qw/ thedir0* /);
...
if( $File::Find::dir =~ m{$searchRe} ){
    $size += -s ;
}

<强> oldanswer: 使用ruleText::Glob#glob_to_regex

提供的全球动力
$ touch thedir0 thedir1 thedir5 thedir66

$ findrule . -name thedir*
thedir0
thedir1
thedir5
thedir66

$ findrule . -name thedir0*
thedir0

$ perl -e"use File::Find::Rule qw/ find rule/; print for find( qw/ file name thedir0* in . /); "
thedir0

$ perl -e"use File::Find::Rule qw/ find rule/; my $size= 0; $size += -s $_ for find( qw/ file name thedir0* in . /); print $size "
0

以及没有在内存中构建文件名列表的详细版本

use File::Find::Rule qw/ find rule /;
my $size = 0;
rule(
    directory =>
    maxdepth => 1 ,
    name => [ 'thedir0*', ],
    exec => sub {
        ## my( $shortname, $path, $fullname ) = @_;
        $size += -s _; ## or use $_
        return !!0; ## means discard filename
    },
)->in( 'directory' );