![使用 stat 表示时间或日期 -r?](https://linux22.com/image/167913/%E4%BD%BF%E7%94%A8%20stat%20%E8%A1%A8%E7%A4%BA%E6%97%B6%E9%97%B4%E6%88%96%E6%97%A5%E6%9C%9F%20-r%EF%BC%9F.png)
我以这种方式列出了文件夹的属性
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
似乎是stat
. 2001 年,GNU coreutils 中出现了一个stat
命令,其 API 与之前的stat
实现完全不同(例如zsh
1997 年的内置命令或更旧的 IRIX stat
),复制了 GNU 的功能find -printf
,但又使用了不同的 API(不同的%x
格式说明符),当你发现一个不太有用的东西时。从那时起我就一直对此感到恼火。 (stat
一年后,BSD 使用另一个(虽然更好)API 实现了自己的API)。 </咆哮>
这里,你可以使用 GNU find
(这种语法比 GNU 早stat
至少十年):
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
内置stat
的zsh
(再次早于 GNU 几年):
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
)、 zshstat -L
报告符号链接本身的修改时间,而 GNU date -r
(和 GNUstat -L
以及不带 的GNUfind -L -printf
和 zsh )报告符号链接最终解析的文件的 mtime到。stat
-L