在perl中过滤具有给定输入范围的文件

时间:2019-06-18 16:13:09

标签: linux shell perl unix

需要输入即文件名的perl脚本,我需要找到与该模式匹配的所有文件。

Example: given input as 2019052300 2019052323 (YYYYMMDDHH)

在这里,我需要将所有以2019052300命名的文件提取到2019052323。例如2019052300,2019052301 .. 2019052323。

谢谢!

1 个答案:

答案 0 :(得分:2)

生成您感兴趣的时间戳列表非常容易。在这段代码中,我使用了Time::Piece,它自2007年的5.10版本以来就是标准Perl发行版的一部分。

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

use Time::Piece;
use Time::Seconds;

@ARGV == 2 or die "Usage: $0 <start> <end>\n";

my ($start_str, $end_str) = @ARGV;

my $format = '%Y%m%d%H';

my $start = Time::Piece->strptime($start_str, $format);
my $end   = Time::Piece->strptime($end_str,   $format);

my $curr  = $start;

while ($curr <= $end) {
  say $curr->strftime($format);
  $curr += ONE_HOUR;
}

在夏令时开始或结束的一段时间内,这可能会给您带来问题。留给读者练习的固定方法:-)