Считается ли специальный параметр $ @ bash циклом в printf?

Я всегда использовал:

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";
}

4
26.03.2018, 20:01
1 ответ

Здесь происходит то, что когда вы передаете printfбольше аргументов, чем у него есть параметры позиционного форматирования для(%sи других вещей ), он будет повторять формат. И он повторяется на нескольких строках, потому что у вас есть \nв вашей строке формата. Ничего особенного в $@в данном случае нет.

Например:

$ printf 'Foo: %s\n' bar baz
Foo: bar
Foo: baz

$ printf 'Foo: %s %s\n' bar baz
Foo: bar baz
17
27.01.2020, 20:45

Теги

Похожие вопросы