Я запускаю эту команду оболочки, чтобы получить последние 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
...
(и если есть более эффективный способ сделать то, что делает вышеупомянутая команда, я весь слух).
find
страница руководства говорит, чтоS
включает дробные секунды: «S Second (00.00 .. 61.00). Есть дробная часть». и я не отмечаю вариант, который сразу неfind
(прости каламбур). Было бы неплохо удалить доли секунды, если это возможно.Ответы:
Вы можете обрезать дробную часть, используя
%.n
синтаксис форматирования, гдеn
целое число, указывающее длину строки, которую вы хотите сохранить. В вашем конкретном случае, заклинание будет:find . -name '*.php' -printf '%TY-%Tm-%Td %TH:%TM:%.2TS %Tz %p\n' | sort -r | head -20
источник