Как я могу изменить время "последнего изменения" (или "последнего изменения") файлов в Linux?

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

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 ответа

Использовать -d флаг вместо.

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

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 указывает на то, что может).

Стиль POSIX по умолчанию -t опция, как отмечается, ограничена разрешением в 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).

Другие вопросы по тегам