Есть ли способ изменить статистическую информацию, такую ​​как mtime или ctime, вручную на Python или на любом другом языке? - PullRequest
0 голосов
/ 27 апреля 2011

Я пытаюсь следующий код:

os.stat(path_name)[stat.ST_CTIME] = ctime

Однако, это дает следующую ошибку:

exceptions.TypeError: 'posix.stat_result' object does not support item assignment

Есть ли способ изменить ctime?

Спасибо!

Ответы [ 3 ]

7 голосов
/ 27 апреля 2011

os.utime(filename, timetuple) может использоваться для установки времени и времени файла.Насколько я знаю, нет никакого способа изменить ctime из пользовательского пространства, не прибегая к таким хаки, как игра с часами или прямая редакция файловой системы (что я действительно не рекомендую), и это верно для любого языка программирования (Python, Perl, C, C ++ ...): это внутренняя ОС, и вы не хотите ее трогать.

См., Например, в документации по команде touch (http://www.delorie.com/gnu/docs/fileutils/fileutils_54.html):

. Хотя сенсорное управление предоставляет возможность изменения двух раз - времени последнего доступа и изменения -файла, на самом деле есть и третий: время смены инода. Это часто называют ctime файла. Время смены инода представляет время, когда метаинформация файла изменилась в последний раз. Один из распространенных примеров этого -изменяются права доступа к файлу. Изменение разрешений не приводит к доступу к файлу, поэтому atime не изменяется и не изменяет файл, поэтому mtime не изменяется. Тем не менее, кое-что в самом файле изменилось,и это должно быть где-то отмечено. Это работа поля ctime. Это необходимо для того, чтобы, например, программа резервного копирования могла сделать новую копию файла, включая новое значение разрешений. Еще одна операция, которая изменяет файлctime, не затрагивая других, переименовывает. В любом случае, это невозможно, ни вmal операции, для пользователя, чтобы изменить поле ctime на указанное пользователем значение.

2 голосов
/ 11 октября 2011

Штрих GNU реализует трюк изменения системного времени для изменения ctime файла.Если это то, что вы хотите, GNU Stroke сделает это за вас: http://stroke.sourceforge.net/.

1 голос
/ 27 апреля 2011

Нет прямого способа установить время изменения, оно обновляется всякий раз, когда изменяется информация inode, например, о владельце, количестве ссылок, режиме и т. Д.*

os.chmod(path_name, os.stat(path_name)[stat.ST_MODE])
...