1

Я пробовал touch -t , но его точность составляет всего одну секунду: когда я использую stat , я вижу, что после десятичной точки (9) все цифры от 0 до нуля (.):

Access: 2013-10-10 15:12:00.000000000 +0200
Modify: 2013-10-10 15:12:00.000000000 +0200
Change: 2015-11-22 18:39:54.369524868 +0100

Как изменить время "последнего изменения" и "последнего изменения" файлов с точностью до 9 чисел после десятичной точки?

2 ответа2

2

Вместо этого используйте флаг -d .

touch -m -d '2015-01-01 01:01:01.123456789' file.ext
1

touch команда позволяет изменить время модификации и / или время доступа . Вы не можете установить время изменения произвольно: оно установлено на время, когда вы изменяете любой из двух других раз.

Причина этого заключается в том, что touch зависит от системного вызова, который может выполнять только комбинации, указанные выше. Исходный код (в GNU coreutils) использует этот блок:

  ok = (fdutimensat (fd, AT_FDCWD, (fd == STDOUT_FILENO ? NULL : file), t,
                     (no_dereference && fd == -1) ? AT_SYMLINK_NOFOLLOW : 0)
        == 0);

который в свою очередь (см. источник) называет futimens или utimensat . Обе эти функции POSIX, который отмечает

После завершения futimens() и utimensat() должны пометить последнюю отметку времени изменения статуса файла для обновления.

Отметка времени изменения статуса - это то, что вы не можете установить произвольно.

Две функции POSIX принимают параметры timespec , которые обеспечивают разрешение в наносекундах. Файловая система вашего компьютера может поддерживать или не поддерживать это (хотя результат из stat указывает, что это возможно).

Как отмечалось, опция -t умолчанию в стиле POSIX ограничена разрешением в 1 секунду. Однако (все еще POSIX) опция -d предусматривает доли секунды:

YYYY-MM-DDThh:mm:SS[.frac][tz]

GNU coreutils поддерживает эту опцию -d , что позволяет наносекундное разрешение. Документация для touch дает в качестве примера

--date="2004-02-27 14:19:13.489392193 +0530"

(где --date - длинное имя, эквивалентное -d).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .