Как я могу изменить время "последнего изменения" (или "последнего изменения") файлов в 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).