perl怎么从一个目录里抓取最近的文件

 我来答
百度网友d580670
2017-03-06 · TA获得超过1983个赞
知道大有可为答主
回答量:2054
采纳率:82%
帮助的人:685万
展开全部
my @res = filter_dir(".", "<10day");
print "@res";

sub to_sec {
my %k = ('day' => 3600*24, 
         'mon' => 3600*24*30, 
 'week' => 3600*24*7,
 'year' => 3600*24*365,
 'hour' => 3600, 'min' => 60, 'sec' => 1);
return $k{(shift)} || 1;
}

sub filter_dir {
my ($dir, $logic) = @_;
my $D;
my @logic;
opendir $D, $dir || return;
chdir $dir;
my @f = grep {-f} readdir $D;
close $D;
my $cur = time;
while ($logic =~/([><]?[=]?)\s*(\d+\.?\d*)\s*(\w+)/g) {
my $sec  = $2* to_sec $3;
my %cmp  = (">"  => sub {$cur - $_[0] >  $sec},
">=" => sub {$cur - $_[0] >= $sec},
"<"  => sub {$cur - $_[0] <  $sec},
"<=" => sub {$cur - $_[0] <= $sec},
"="  => sub {$cur - $_[0] == $sec},
);
push @logic, $cmp{$1};
}

my @m = map {(stat)[9]}@f;
my @res;
if (@logic) {
O: for my $i(0..$#m) {
for my $cmp(@logic) {
next O if (! &$cmp($m[$i]));
}
push @res, $f[$i];
}
    }
return @res;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式