Linux

獲取特定格式的文件修改時間(yyyymmddhh24miss)

  • November 4, 2018

我想以特定格式獲取文件的修改時間。

我怎樣才能做到這一點 ?

我知道

stat -c %x find.txt

但我需要這種格式:

yyyymmddhh24miss

如果重要,ksh我正在使用。Linux 2.6.18-406.el5 x86_64

你可以使用類似的東西:

/bin/date +%Y%m%d%H%M%S -d "$(/usr/bin/stat -c %x find.txt)"

使用 GNU 工具:

find file -prune -printf '%TY%Tm%Td%TH%TM%TS\n'

或者

date -r file +%Y%m%d%H%M%S.%N

(但請注意,對於符號連結,它顯示的是符號連結目標的修改時間,而不是符號連結本身(這可能與關心符號連結的 mtime 的人一樣,參見-Lwithfind做同樣的事情))。

如果您kshksh93並且它是在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當你通過名字呼叫它們時,這些內置函式將被自動呼叫)。

如果您不關心小數部分,請刪除.%Nor for 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 秒,一個在更改為冬季時間之前,一個在更改為冬季時間之後,但仍處於相同的掛鐘時間(因為該時鐘已在間隔內移回一小時)。

$ 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

引用自:https://unix.stackexchange.com/questions/285897