Как установить mtime файла в формате эпохи?

Как установить mtime файла в формате эпохи?

я знаю какполучать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.

Связанный контент