需求:perl 二秒钟循环删除指定文件夹下所有满足条件的文件,不包含文件夹,若要删除文件夹另作处理,加一个判断
目录格式:D:\Users\XXXXXXX\Desktop\Test\023\20160209120314123\*
文件格式:20150613121412
use Time::Format qw(%time %strftime %manip);
my $basedir = 'D:\Users\KONGJUNLONG280\Desktop\Test';my $d;
my @files = ();
my @dirs = ($basedir); die "error $basedir: $!" unless(-d $basedir);
my $timeout = 30*24*60*60; #一个月->秒
my $whiletime = 2;
while(1){
my $delCount = 0;
my @dirs = ($basedir); die "error $basedir: $!" unless(-d $basedir);
while(@dirs){
$d = $dirs[0];
$d .= "/" unless($d=~/\/$/);
opendir $folder, $d || die "Can not open this directory";
my @filelist = readdir $folder;
closedir $folder;
my $f;
foreach (@filelist) {
$f = $d.$_;
#need to remove . and ..
if($_ eq "." || $_ eq "..")
{
next;
}
else{
#获取当前时间戳
my $timestamp = $time{'yyyymmddhhmmss'};
#print $timestamp."\n";
my $myname = $_;
my $mypath = $f;
#print $myname."\n";
#print $mypath."\n";
my $notimeoutfiletime = $myname+$timeout;
#文件
if(length($myname) == 14 and $timestamp>$notimeoutfiletime){
#print $myname."\n";
#print $mypath."\n";
#删除扫描到的文件
unlink($mypath);
$delCount = $delCount + 1;
}
push(@dirs, $f) if(-d $f);
push(@files, $f) if(-f $f);
}
}
shift @dirs;
}
sleep($whiletime);
print "删除了 ".$delCount." 个过期文件\n";
}