Как избавиться от доли секунды в поиске, используя -printf?

6

Я запускаю эту команду оболочки, чтобы получить последние 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
...

В соответствии с man-страница 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
...

(и если есть более эффективный способ сделать то, что делает вышеупомянутая команда, я весь слух).

Drakes
источник
мой find страница руководства говорит, что S включает дробные секунды: «S Second (00.00 .. 61.00). Есть дробная часть». и я не отмечаю вариант, который сразу не
Eric Renouf
Вы можете найти некоторые полезные предложения на stackoverflow.com/questions/5566310/...
Eric Renouf
@EricRenouf Хорошая находка на лучшем рекурсиве find (прости каламбур). Было бы неплохо удалить доли секунды, если это возможно.
Drakes

Ответы:

6

Вы можете обрезать дробную часть, используя %.n синтаксис форматирования, где n целое число, указывающее длину строки, которую вы хотите сохранить. В вашем конкретном случае, заклинание будет:

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

Larssend
источник
1
@ Дрейкс, я думаю, ты должен действительно принять это как ответ.
r2evans