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

(linux下)要求是,遍历/ccd/pa/下的所有后缀为log的文件(包括所有子文件夹),只保留时间顺序离现在最近的20个文件,其它删除。具体怎么实现啊。... (linux下)要求是,遍历/ccd/pa/下的所有后缀为log的文件(包括所有子文件夹),只保留时间顺序离现在最近的20个文件,其它删除。具体怎么实现啊。 展开
 我来答
johnrobbet
2009-07-13 · TA获得超过121个赞
知道答主
回答量:70
采纳率:0%
帮助的人:55.7万
展开全部
用正则表达式去找你要删的文件,匹配扩展名。用stat函数获取文件访问/创建时间。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
uestcfb
2009-07-11 · TA获得超过1068个赞
知道小有建树答主
回答量:609
采纳率:0%
帮助的人:702万
展开全部
#!/usr/bin/perl -w

my $basedir = '/ccd/pa/';
my $num = 20;
my $pattern = 'log$';

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";
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式