您好我想使用下面的代码计算特定目录的大小,但我想搜索字符串为DIR0 *以列出名为DIR01,DIR02的所有目录。我该如何实现呢?
if ($File::Find::dir =~ m/^(.*)$search/) {
$size += -s ;
}
答案 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:强> 使用rule由Text::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' );