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

11

Я знаю, как получить файл mtime в формате эпохи:

stat --format=%Y <file>

Но я не смог понять, как установить mtime файла в формате эпохи. Страница man touch (1), по-видимому, принимает только значение «отметки времени» (более или менее фиксированный формат, в котором используются месяцы, дни, часы, минуты и т. Д.) Или «в основном свободная для чтения строка даты человеком».

Есть ли другая утилита, которую я должен изучить?

Благодарю.

EIL
источник
1
Пожалуйста, всегда включайте вашу ОС. Решения очень часто зависят от используемой операционной системы. Используете ли вы Unix, Linux, BSD, OSX, что-то еще? Какая версия?
Terdon

Ответы:

10

По крайней мере, в мире GNU:

touch --date=@1403970787 file

Как с date.

Хауке Лагинг
источник
1

С perl:

$ perl -e 'utime (stat($_))[8], time(), $_ for @ARGV' file1 file2 ...

Это изменит mtime всех файлов в @ARGV. (stat($_))[8]время файла.

utime может получить список файлов, если вы не заботитесь об изменении времени, вы можете попробовать:

 $ perl -e '$t = time(); utime $t, $t, @ARGV' file1 file2 ...

Заметка

utimeзависит от библиотеки времени выполнения C и используемой файловой системы. увидеть больше в perldoc -f utimeи perldoc perlport.

cuonglm
источник
0

С помощью touchкоманды из GNU coreutils (то есть для не встроенных Linux и Cygwin), посмотрите полное руководство (обычно доступное локально в информационном формате) для документации форматов ввода даты . Даты эпохи указываются с префиксом @:

touch -d @1234567890 foo

Это также работает с BusyBox (по крайней мере, в некоторых системах это может зависеть от параметров компиляции).

С * BSD я не думаю, что вы можете сделать это в touchодиночку, но вы можете позвонить, dateчтобы отформатировать время эпохи в приемлемый формат touch.

touch -d "$(date -r 1234567890 +%Y%m%d%H%M.%S)" foo

У POSIX, как известно, нет способов манипулировать датами эпохи. Вы можете использовать Perl .

Жиль "ТАК - перестань быть злым"
источник