Я всегда использовал:
ls -l -u
Альтернативно - может быть, вырвать perl?
Perl может использовать stat
syscall напрямую
#!/usr/bin/env perl
use strict;
use warnings;
foreach my $filename ( @ARGV ) {
print "$filename =>", (stat($filename))[8],"\n";
}
Вы можете сделать однослойный звонок как:
perl -e 'print "$_ ",(stat($_))[8],"\n" for @ARGV'
Если вы хотите сделать более красивую временную метку (а не эпоху, которая возвращает stat
):
perl -MTime::Piece -e 'print "$_ ",Time::Piece->new((stat($_))[8]),"\n" for @ARGV'
или
perl -MTime::Piece -e 'print "$_ ",Time::Piece->new((stat($_))[8])->strftime("%F %T"),"\n" for @ARGV'
Которая использует strftime
и %F %T
, чтобы дать вам:
2015-09-06 01:02:33
Расширение сценария:
#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;
foreach my $filename ( @ARGV ) {
my $epoch_time = (stat($filename))[8];
my $time_string = Time::Piece -> new ( $epoch_time ) -> strftime ( "%F %T" );
print "$time_string => $filename\n";
}
Здесь происходит то, что когда вы передаете printf
больше аргументов, чем у него есть параметры позиционного форматирования для(%s
и других вещей ), он будет повторять формат. И он повторяется на нескольких строках, потому что у вас есть \n
в вашей строке формата. Ничего особенного в $@
в данном случае нет.
Например:
$ printf 'Foo: %s\n' bar baz
Foo: bar
Foo: baz
$ printf 'Foo: %s %s\n' bar baz
Foo: bar baz