perl 循环删除指定文件夹下所有满足条件的文件,不包含文件夹

需求: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";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值