您的位置:首页 > 其它

perl如何遍历指定文件夹下的指定扩展名文件,并按时间顺序要求删除

2016-06-07 10:38 621 查看

(linux下)要求是,遍历/ccd/pa/下的所有后缀为log的文件(包括所有子文件夹),只保留时间顺序离现在最近的20个文件,其它删除。

;
my $num = 20;
my $pattern = 'log$';
my $basedir = '/ccd/pa/';
my @files = ();
my @dirs = ($basedir);
die "error $basedir: $!" unless(-d $basedir);

# recursively find all files
while(@dirs){
$d = $dirs[0];
$d .= "/" unless($d=~/\/$/);
for my $f (glob($d . '*')){
push(@dirs, $f) if(-d $f) ;
push(@files,$f)if(-f $f && $f=~/$pattern/);
}
shift @dirs;
}

#sort according to modified-time
@files=sort{
@sta1=stat($a);
@sta2=stat($b);
$sta2[9]<=>$sta1[9];
}@files;

# delete files earlier than the $num-th
@files2del = @files[$num..@files-1];
my $cnt = 0;
if(@files2del){
local $"="\n\t";
print "going to delete these files:\n\t@files2del\n[y/N]?";
my $choice = <>||'N';
$cnt = unlink(@files2del)if($choice =~ /^\s*y\s*$/i);
}
print "$cnt files deleted\n";
觉得不错,转载下,来自百度知道
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: