获取特定格式的文件修改时间 (yyyymmddhh24miss)

ANO*_*rog 5 linux stat date

我想以特定格式获取文件的修改时间。
我怎样才能做到这一点 ?
我知道

stat -c %x find.txt
Run Code Online (Sandbox Code Playgroud)

但我需要这种格式:

yyyymmddhh24miss
Run Code Online (Sandbox Code Playgroud)

我使用kshLinux 2.6.18-406.el5 x86_64,如果它很重要。

Sté*_*las 5

使用 GNU 工具:

find file -prune -printf '%TY%Tm%Td%TH%TM%TS\n'
Run Code Online (Sandbox Code Playgroud)

或者

date -r file +%Y%m%d%H%M%S.%N
Run Code Online (Sandbox Code Playgroud)

(但要注意,对于符号链接时,显示的修改时间目标的符号链接,而不是符号链接本身(这可能只是以及谁对一个符号链接的修改时间关心,看到-Lfind做同样的))。

如果您kshksh93并且它是在date启用内置功能的情况下构建的:

command /opt/ast/bin/date -m -f %Y%m%d%H%M%S.%N file
Run Code Online (Sandbox Code Playgroud)

command /opt/ast/bin/date调用date绑定到的内置函数/opt/ast/bin/date,如果您/opt/ast/bin在 前面添加,则$PATH当您按名称调用它们时,将自动调用这些内置函数)。

如果您不关心小数部分,请删除.%N或 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
Run Code Online (Sandbox Code Playgroud)

这两个文件的修改时间相隔 3600 秒,一个是在更改为冬季时间之前,一个是在更改为冬季时间之后,但仍处于相同的挂钟时间(因为该时钟已在间隔中向后移动一小时)。

$ find file? -prune -printf '%TY%Tm%Td%TH%TM%TS\n'
20161030010000.0000000000
20161030010000.0000000000
Run Code Online (Sandbox Code Playgroud)

要获得明确的时间,您可以包含 UTC 偏移量:

$ find file? -prune -printf '%TY%Tm%Td%TH%TM%TS%Tz\n'
20161030010000.0000000000+0100
20161030010000.0000000000+0000
Run Code Online (Sandbox Code Playgroud)

或者给出UTC时间:

$ TZ=UTC0 find file? -prune -printf '%TY%Tm%Td%TH%TM%TS\n'
20161030000000.0000000000
20161030010000.0000000000
Run Code Online (Sandbox Code Playgroud)


Lau*_*scu 3

你可以使用类似的东西:

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