listar arquivos de uma data específica e gravar em outro arquivo em perl

2

Eu tenho uma lista de arquivos .DTA com datas abaixo.

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

Eu quero gravar todos os dados dos arquivos 29 de junho em um arquivo. Eu tenho a lógica de combinar vários arquivos em um. Abaixo está o meu código.

#!/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;

Neste código eu posso combinar todos os arquivos .DTA em um. Mas preciso combinar apenas arquivos 29 de junho para criar um novo arquivo. Alguém pode me ajudar em perl ?

    
por Riju Mukherjee 02.07.2018 / 13:02

1 resposta

1

Para comparar os registros de data e hora do arquivo (presumivelmente a hora da modificação), você precisa stat() de cada arquivo e comparar o ano, mês e dia correspondentes. Aqui está um exemplo que codifica um filtro para 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;
    
por 02.07.2018 / 15:30

Tags