
特定の形式のファイル修正時間を知りたいです。
どうすればいいですか?
私は知っています
stat -c %x find.txt
しかし、次の形式が必要です。
yyyymmddhh24miss
重要な場合ksh
。Linux 2.6.18-406.el5 x86_64
答え1
GNUツールの使用:
find file -prune -printf '%TY%Tm%Td%TH%TM%TS\n'
または
date -r file +%Y%m%d%H%M%S.%N
(ただし、シンボリックリンクの場合は修正時間が表示されます。ターゲットシンボリックリンク自体ではなくシンボリックリンクの時間(これはおそらくシンボリックリンクのランタイムに興味がある人と同じです。同じタスクの-L
実行を参照)。find
あなたksh
が組み込み機能を有効にして構築したksh93
場合:date
command /opt/ast/bin/date -m -f %Y%m%d%H%M%S.%N file
(command /opt/ast/bin/date
呼び出しは、前に追加すると名前で呼び出されたときに自動的に呼び出される組み込みdate
関数にバインドされます。)/opt/ast/bin/date
/opt/ast/bin
$PATH
少数の部分を気にしない場合は、または.%N
を削除してにfind
置き換えてください。%TS
%.2TS
時間は現在のタイムゾーンに基づいて表示されます。この日付形式にはUTCオフセットが含まれていないため、あいまいにすることができます。たとえば、英国本土のタイムゾーンでは、次のようになります。
$ date -r file1
Sun 30 Oct 01:00:00 BST 2016
$ date -r file2
Sun 30 Oct 01:00:00 GMT 2016
両方のファイルは3600秒間隔で修正されました。 1つは冬時間に変更される前で、もう1つは冬時間に変更された後でした。しかし、それでも壁時計の時間は同じです(時計が時間間隔から1時間後に移動したため)。
$ find file? -prune -printf '%TY%Tm%Td%TH%TM%TS\n'
20161030010000.0000000000
20161030010000.0000000000
明確な時間を得るためにUTCオフセットを含めることができます。
$ find file? -prune -printf '%TY%Tm%Td%TH%TM%TS%Tz\n'
20161030010000.0000000000+0100
20161030010000.0000000000+0000
またはUTC時間が与えられた場合:
$ TZ=UTC0 find file? -prune -printf '%TY%Tm%Td%TH%TM%TS\n'
20161030000000.0000000000
20161030010000.0000000000
答え2
次のようなものを使用できます。
/bin/date +%Y%m%d%H%M%S -d "$(/usr/bin/stat -c %x find.txt)"
答え3
文書改訂する時刻は日付形式で指定できます。
$ date -d @"$(stat -c %Y file1)" +'%Y%m%d%H%M%S'
%X
最後のアクセス時間と%Z
最後の変更に使用されます。
%X
ただし%Y
、およびの最大解像度%Z
は秒です。
ナノ秒分解能の場合と%x
オプションを使用してください。%y
%z
$ date -d "$(stat -c %y file1)" +'%Y%m%d%H%M%S.%N'
20151101020000.012345678
すでに日付を操作しているので、-r
日付オプションを使用して単純化したり、findのフォーマットされた出力を使用したりできます。
$ date -r file1 +'%Y%m%d%H%M%S%z'
20151101010000-0500
$ find file1 -printf '%TY%Tm%Td%TH%TM%2.2TS%Tz\n'
20151101010000-0500
上記のコマンドの解像度は秒です。ナノ秒が必要な場合:
$ date -r file1 +'%Y%m%d%H%M%S.%N%z'
20151101010000.012345678-0500
$ find file1 -printf '%TY%Tm%Td%TH%TM%TS%Tz\n'
20151101010000.0123456780-0500
これら2つのコマンドは修正時間を提供します。
日付では、この-r
オプションを使用してアクセスまたはステータス時間を取得することはできません。
照会中:接続時間%Tを%Aに変更、状態変更時間%Cを%Cに変更
タイムゾーン情報
上記のすべてのコマンドは、使用されたタイムゾーンの影響を受けます。
$ date -r file1 +'%Y%m%d%H%M%S.%N%z'
20151101010000.012345678
$ TZ=GMT0 date -r file1 +'%Y%m%d%H%M%S.%N%z'
20151101060000.012345678
時間はからに01
変わります06
。これは、使用しているコンピュータのタイムゾーンがに設定されているために発生しますAmerica/New_York
。時間がGMT0
オフセット(またはGMT
OR)として計算されると、その値は5時間増加しますGMT+0
。GMT-0
また、現地時間値(不完全な場合)を使用すると、実際には異なりますが、同じ値をレンダリングできます。
$ date -r file1 +'%Y%m%d%H%M%S.%N'; date -r file2 +'%Y%m%d%H%M%S.%N'
20151101010000.012345678
20151101010000.012345678
%z
これがまさにテーリングが必要な理由だ。地元の頻度:
$ date -r file1 +'%Y%m%d%H%M%S.%N%z'; date -r file2 +'%Y%m%d%H%M%S.%N%z'
20151101010000.012345678-0500
20151101010000.012345678-0400
これにより値が異なります。ただし、この形式は年代順の並べ替えを困難にします。これはGMT
時間オフセット(%z
)が常に0
あり、省略される可能性があるため、最善の解決策は時間を使用することです。
$ ( TZ=GMT0; date -r file1 +'%Y%m%d%H%M%S.%N'; date -r file2 +'%Y%m%d%H%M%S.%N')
20151101060000.012345678
20151101050000.012345678
そして並べ替えも可能です。
[1]タッチに使用するファイルの値です。
touch -m -d '20151101 01:00:00.012345678-05' file1
touch -a -d '20151101 01:00:00.987654321-05' file1
touch -m -d 01 04 'file2
touch - a -d '20151101 01:00:00.987654321-04'ファイル2