如何使用-printf在查找中去掉小数秒?

Dra*_*kes 13 linux date-time find

我正在运行此 shell 命令以获取在我的服务器上修改的最新 20 个 PHP 文件。

find . -name '*.php' -printf '%TY-%Tm-%Td %TH:%TM:%TS %Tz %p\n' | sort -r | head -20
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

2016-08-08 01:44:45.3820716170 -0700 ./html/index.php
2016-08-07 05:39:29.0000000000 -0700 ./html/thumb.php
2016-08-07 03:01:44.0000000000 -0700 ./html/paths.php
...
Run Code Online (Sandbox Code Playgroud)

根据strftime 手册页,我应该能够使用 %S(和 %TS)

%S

第二个是十进制数(范围 00 到 60)。(范围最大为 60,以允许偶尔出现闰秒。)

可能有问题find,但其他时间参数按预期工作。我正在尝试获得如下结果。如果额外的字符串实际上是小数秒,则四舍五入或截断都可以。如何才能做到这一点?

2016-08-08 01:44:45 -0700 ./html/index.php
2016-08-07 05:39:29 -0700 ./html/thumb.php
2016-08-07 03:01:44 -0700 ./html/paths.php
...
Run Code Online (Sandbox Code Playgroud)

(如果有更有效的方法来执行上述命令的操作,我会全力以赴。)

Lar*_*end 14

您可以使用%.n格式化语法截断小数部分,其中n是一个整数,指定要保留的字符串的长度。在您的特定情况下,咒语将是:

find . -name '*.php' -printf '%TY-%Tm-%Td %TH:%TM:%.2TS %Tz %p\n' | sort -r | head -20