С инструментами GNU:
find file -prune -printf '%TY%Tm%Td%TH%TM%TS\n'
или
date -r file +%Y%m%d%H%M%S.%N
(хотя имейте в виду, что для символических ссылок, который отображает время модификации цели символической ссылки, а не самой символической ссылки (которая также может быть а кого интересует время mtime символической ссылки, см. -L
с find
, чтобы сделать то же самое)).
Если ваш ksh
- ksh93
и он был построен с включенной встроенной датой date
:
command /opt/ast/bin/date -m -f %Y%m%d%H%M%S.%N file
( command / opt / ast / bin / date
вызывает встроенную дату
, привязанную к / opt / ast / bin / date
, если вы добавите / opt / ast / bin
в перед $ PATH
, эти встроенные команды будут вызываться автоматически, когда вы вызываете их по имени).
Если вам не нужна дробная часть, удалите .% N
или для find
замените % TS
на %. 2ТС
.
Обратите внимание, что время будет указано в текущем часовом поясе. Поскольку этот формат даты не включает смещение UTC, он может быть неоднозначным. Например, в моем часовом поясе на материковой части Британии:
$ date -r file1
Sun 30 Oct 01:00:00 BST 2016
$ date -r file2
Sun 30 Oct 01:00:00 GMT 2016
Эти два файла имеют время модификации, которое отстоит друг от друга на 3600 секунд, один до, один после перехода на зимнее время, но все еще с тем же временем настенных часов (поскольку эти часы были перемещены назад один час в интервале).
$ find file? -prune -printf '%TY%Tm%Td%TH%TM%TS\n'
20161030010000.0000000000
20161030010000.0000000000
Чтобы время было однозначным, вы можете включить смещение UTC:
$ find file? -prune -printf '%TY%Tm%Td%TH%TM%TS%Tz\n'
20161030010000.0000000000+0100
20161030010000.0000000000+0000
Или указать время в формате UTC:
$ TZ=UTC0 find file? -prune -printf '%TY%Tm%Td%TH%TM%TS\n'
20161030000000.0000000000
20161030010000.0000000000