時間や日付にstatを使用してください。 -r?

時間や日付にstatを使用してください。 -r?

このようにフォルダのプロパティを一覧表示しました。

stat -c $'--------------
File:              %n
Size:              %s
Owner:             %U
Group:             %G
Permissions:       %A'

しかし、時間を得るのに問題があります。 statを使用して時間を表現すると、最後に気に入らない数字がたくさん表示され、date -rを使用すると同じ内容を書き込むことができません。そこに並んでください。私と以前の他のすべての人のように。

次のように見えたいです。修正時間: 2019-11-13 11:34:54 (終わりに+0000なし)

ベストアンサー1

<rant>あなたのコマンドstatは、stat2001年に以前の実装(1997年の組み込みコマンドや以前のIRIXなど)とはstatまったく異なるAPIを使用してGNU coreutilsに登場しました。これはGNUの機能をコピーしますが、他のAPI(他のフォーマット指定子)はあまり役に立ちません。私はそれ以来これのために迷惑をかけた。 (1年後、BSDは他の(より良い)APIを使用して独自のstatzshstatfind -printf%xstatAPIを実装しました。)</rant>

ここでGNUを使用できますfind(この構文はGNUよりstat少なくとも10年先です)。

find ./* -prune -printf '--------------
File:              %f
Size:              %s
Owner:             %u
Group:             %g
Permissions:       %m
Modification time: %TF %8TT %Tz
'

出力は次のとおりです。

--------------
File:              file
Size:              10
Owner:             stephane
Group:             stephane
Permissions:       -rw-r--r--
Modification time: 2019-11-13 11:34:54 +0000

ここでは時間形式が使用されます%F %T %z strftime()。これは、タイムスタンプを秒単位で正確に表現する標準的で明確で、必要に応じて調整できます。%T<x>(書式指定子はどこに<x>ありますか?)最後のアクセス時間、状態変更時刻に使用される最後の修正時刻です。strftime()%A<x>%C<x>

%zタイムゾーンオフセット仕様(上記)に興味がない場合は、それを削除してください。ただし、こうすると時間表現があいまいになります。%Tz

組み込み(やはりstatGNUzshより数年早い):

zmodload zsh/stat
for f (*) {
  stat -F '%F %T %z' -sLH s -- $f &&
    print -r -- "--------------
File:              $f
Size:              $s[size]
Owner:             $s[uid]
Group:             $s[gid]
Permissions:       $s[mode]
Modification time: $s[mtime]"
}

%zタイムゾーンオフセットを見たくない場合は、もう一度削除してください。)

警告注:シンボリックリンクの場合、GNU stat(なし-L)、GNU find -printf(なし-L)、およびzshはstat -Lシンボリックリンク自体の修正時間を報告しますが、GNU date -r(およびGNU stat -L、GNU、およびzshなしfind -L -printf)はシンボリックリンクが最終的にチェックするファイルです。の mtime を報告します。到着stat-L

おすすめ記事