如何使用 -printf 去除 find 中的秒的小数部分?

如何使用 -printf 去除 find 中的秒的小数部分?

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

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

输出如下:

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
...

根据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
...

(如果有更有效的方法来执行上述命令,我洗耳恭听。)

答案1

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

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

相关内容