列出特定日期的文件并写入 perl 中的另一个文件

列出特定日期的文件并写入 perl 中的另一个文件

我有一个清单.DTA具有以下日期的文件。

Jun 26 02:53 fs261803.DTA
Jun 26 02:54 fs261804.DTA
Jun 26 02:56 fs261805.DTA
Jun 26 03:25 fs261865.DTA
Jun 26 03:27 fs261869.DTA
Jun 27 03:21 fs271865.DTA
Jun 27 03:23 fs271869.DTA
Jun 28 03:23 fs281865.DTA
Jun 28 03:25 fs281869.DTA
Jun 29 03:21 fs291865.DTA
Jun 29 03:23 fs291869.DTA
Jun 29 03:54 fs291803.DTA

我想写全部6月29日将数据归档到一个文件中。我有将多个文件合并为一个的逻辑。下面是我的代码。

#!/usr/bin/perl

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

my $start_pos = 0;
my $data_len  = 15;
my $pad_len   = 54;

my $dir = ".";
opendir(DIR, $dir) or die "Cannot open directory: $dir!\n";
my @files = readdir(DIR);
closedir(DIR);
open my $out, ">>output.trns" or die "Cannot open output.trns!\n";

foreach my $file (@files)
{
    if($file =~ /DTA$/)
        #if ($file=`ls -rlt *.DTA` )
    {
        #print "$file\n";
        open my $in, "<$file" or die "Cannot open $file!\n";
        while (<$in>) {
        say $out ' ' x $pad_len, substr($_, $start_pos, $data_len);
        }

        close $in;
        }
}
close $out;

在这段代码中我可以结合所有.DTA文件合二为一。但我只需要结合6月29日文件来创建一个新文件。有人可以帮我吗perl

答案1

为了比较文件的时间戳(大概是修改时间),您需要对stat()每个文件并比较相应的年、月、日。以下是对 2018-06-29 的过滤器进行硬编码的示例:

next unless $file =~ /DTA$/;
my $fullpath = $dir . "/" . $file;
my $wantedyear=2018;
my $wantedmonth=5; ## zero-based
my $wantedday=29;
my $mtime=(stat $fullpath)[9];
my $fileyear=(localtime($mtime))[5] + 1900;
next unless $fileyear == $wantedyear;
my $filemonth=(localtime($mtime))[4];
next unless $filemonth == $wantedmonth;
my $fileday=(localtime($mtime))[3];
next unless $fileday == $wantedday;

相关内容