Как изменить дату изменения файла?

Как изменить дату изменения файла?

Как изменить дату "изменения" файла? Использование touchне работает:

$ touch -t 9901010000 тест;стат тест
  Файл: `test'
  Размер: 0 Блоки: 0 Блок ввода-вывода: 4096 обычный пустой файл
Устройство: fe01h/65025d Inode: 11279017 Ссылки: 1
Доступ: (0644/-rw-r--r--) Uid: (1000/x) Gid: (1000/x)
Доступ: 1999-01-01 00:00:00.000000000 +0100
Изменить: 1999-01-01 00:00:00.000000000 +0100
Изменение: 2012-04-08 19:26:56.061614473 +0200
 Рождение: -

решение1

Вы не можете изменить ctime обычными способами. Это сделано намеренно: ctime всегда обновляется до текущего значения при изменении любых метаданных файла, и нет способа навязать другое ctime. Чтобы изменить ctime файла, вам нужно выполнить одно из следующих действий:

  • Установите системное время на то значение ctime, которое вы хотите применить, затем коснитесь файла и сбросьте системное время.
  • Измените ядро, чтобы добавить интерфейс для изменения ctime.
  • Получите прямой доступ к образу диска (например, с помощью debugfs) и поработайте с битами на диске (не делайте этого, пока файловая система смонтирована).

решение2

У вас есть ответ на связанный вопрос SO, на который указал jw013, для extX, наразмонтированный диск:

# Update ctime
debugfs -w -R 'set_inode_field /tmp/foo ctime 201001010101' /dev/sda1

# Drop vm cache so ctime update is reflected
echo 2 > /proc/sys/vm/drop_caches

решение3

$NOW=$(date) && date -s "2030-08-15 21:30:11" && touch file.txt && date -s "$NOW"

https://www.shellhacks.com/fake-file-access-modify-change-timestamps-linux

решение4

Ctime файла обновляется при изменении любых метаданных.

$ ls -l x.py
-rw-rw-r--. 1 ignacio ignacio 485 Mar 26  2010 x.py
$ stat -c %z x.py
2010-03-26 11:57:56.237068175 -0400
$ chown ignacio x.py
$ stat -c %z x.py
2012-04-08 15:31:33.682383575 -0400
$ ls -l x.py
-rw-rw-r--. 1 ignacio ignacio 485 Mar 26  2010 x.py

Связанный контент