
я знаю какполучатьmtime файла в формате эпохи:
stat --format=%Y <file>
Но я не смог понять, как это сделать.наборmtime файла в формате эпохи. Страница man touch(1) принимает только значение "timestamp" (более или менее фиксированный формат, который использует месяцы, дни, часы, минуты и т. д.) или "в основном свободную читаемую человеком строку даты".
Есть ли еще какие-то утилиты, на которые мне следует обратить внимание?
Спасибо.
решение1
По крайней мере в мире GNU:
touch --date=@1403970787 file
Как и с date
.
решение2
С помощью touch
команды из GNU coreutils (т.е. на невстроенном Linux и Cygwin) посмотрите наполное руководство(обычно доступно локально в формате info) для документацииформаты ввода даты.Даты эпохиобозначаются префиксом @
:
touch -d @1234567890 foo
Это также работает с BusyBox (по крайней мере, в некоторых системах, это может зависеть от параметров компиляции).
Я не думаю, что с *BSD вы сможете сделать это touch
самостоятельно, но вы можете вызвать date
функцию форматирования времени эпохи в приемлемый формат touch
.
touch -d "$(date -r 1234567890 +%Y%m%d%H%M.%S)" foo
POSIX, как известно, не имеет способов манипулировать датами эпох. Вы можетеиспользовать перл.
решение3
С perl
:
$ perl -e 'utime (stat($_))[8], time(), $_ for @ARGV' file1 file2 ...
Это изменит mtime всех файлов в @ARGV
. (stat($_))[8]
is atime файла.
utime
можно получить список файлов, если вас не волнует изменение времени, вы можете попробовать:
$ perl -e '$t = time(); utime $t, $t, @ARGV' file1 file2 ...
Примечание
utime
зависит от библиотеки времени выполнения C и используемой файловой системы. Подробнее см. в perldoc -f utime
и perldoc perlport
.