私はそれを完璧にやります-タイムスタンプのリストでフィードします:
#!/usr/bin/perl
use strict;
use warnings;
use Time::Piece;
while ( my $ts = <DATA> ) {
chomp ( $ts );
my $t = Time::Piece->new();
print $t->epoch, " ", $t,"\n";
}
__DATA__
1442039711
1442134211
1442212521
この出力:
1442039711 Sat Sep 12 07:35:11 2015
1442134211 Sun Sep 13 09:50:11 2015
1442212521 Mon Sep 14 07:35:21 2015
特定の出力形式が必要な場合は、strftime
たとえば次を使用できます。
print $t->epoch, " ", $t->strftime("%Y-%m-%d %H:%M:%S"),"\n";
これをあなたのパイプのワンライナーに変えるには:
perl -MTime::Piece -nle '$t=Time::Piece->new($_); print $t->epoch, " ", $t, "\n";'
しかし、代わりにFile::Find
モジュールの使用を検討し、代わりにperlですべてを実行することをお勧めします。カットする前にディレクトリ構造の例を提供する場合は、例を示します。しかし、それは次のようになります:
#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;
use File::Find;
sub print_timestamp_if_dir {
#skip if 'current' item is not a directory.
next unless -d;
#extract timestamp (replicating your cut command - I think?)
my ( $timestamp ) = m/.{3}(\d{9})/; #like cut -c 3-12;
#parse date
my $t = Time::Piece->new($timestamp);
#print file full path, epoch time and formatted time;
print $File::Find::name, " ", $t->epoch, " ", $t->strftime("%Y-%m-%d %H:%M:%S"),"\n";
}
find ( \&print_timestamp_if_dir, "." );
Fri Oct 2 05:35:28 47592
)