perl找出一个目录下指定日期的文件

发布时间:2019-10-08编辑:脚本学堂
perl找出一个目录下指定日期的文件,感兴趣的朋友可以参考下。

perl找出一个目录下指定日期的文件,感兴趣的朋友可以参考下。

一、需求
目录名:/opt/etl_data/log/standlog

该目录下有日期目录:
/opt/etl_data/log/standlog/2012-10-22
/opt/etl_data/log/standlog/2012-10-23
/opt/etl_data/log/standlog/2012-10-24
.....

每个日期目录下有相应的日期文件:
/opt/etl_data/log/standlog/2012-10-22/20121022
/opt/etl_data/log/standlog/2012-10-23/20121023
/opt/etl_data/log/standlog/2012-10-24/20121024
.....

现要通过一个子程序实现将上述的日期文件找出来。

实现方法:
 

复制代码 代码如下:
    sub product_filename{
       my ($dir)=@_;
       my (@datename,@list,$date);
       opendir DIR,$dir or die "Cann't open the $dir";
       @list=readdir DIR or die;
       for my $file (@list){
          next if $file =~ /./;
          next if $file =~ /../;
          push @datename,$file;
       }
       my ($dirname,@dirlist);
       for my $listdir (@datename){
          $dirname=$dir."/".$listdir;
          push @dirlist,$dirname;
       }
       my ($filename,$time,@filenames);
       for (@dirlist){
         $time = "$1$2$3" if /(d+)-(d+)-(d+)$/;
         $filename = $_."/".$time;
         push @filenames,$filename;
       }
       return @filenames;
    }
 

参数传递:
 

复制代码 代码如下:
    my $dir="/opt/etl_data/log/standlog";
    my @datelist=&product_filename($dir);

二、 需求
现要针对这些文件作一些比对,根据我所要输入的日期时间段,找出对应的文件。
比如,我输入20121001  20121031,会打印出这个时间段的日期文件。

该子程序实现为:
 

复制代码 代码如下:
    sub file_compare{
       my ($filetime,@filenames)=@_;
       my (%times);
       for (@filenames){
          $times{$_}="$1" if /(d+)$/;
       }
       for my $key (keys %times){
          if ($filetime eq $times{$key}){
              return $key;
          }
       }
    }

file_compare子程序是将文件名作为键,文件名的最后一段日期作为值,存入%times散列表。
然后将传入的$filetime与%times散列表中的值进行比对,如果相同,返回文件名。