Como posso alterar a data de 'alteração' do arquivo?

Como posso alterar a data de 'alteração' do arquivo?

Como posso alterar a data de “alteração” de um arquivo? Usar touchnão funciona:

$ touch -t 9901010000 teste;teste estatístico
  Arquivo: `teste'
  Tamanho: 0 Blocos: 0 Bloco IO: 4096 arquivo vazio regular
Dispositivo: fe01h/65025d Inode: 11279017 Links: 1
Acesso: (0644/-rw-r--r--) Uid: ( 1000/ x) Gid: ( 1000/ x)
Acesso: 01-01-1999 00:00:00.000000000 +0100
Modificar: 01-01-1999 00:00:00.000000000 +0100
Alteração: 08/04/2012 19:26:56.061614473 +0200
 Aniversário: -

Responder1

Você não pode alterar o ctime por meios comuns. Isso ocorre por design: o ctime é sempre atualizado para o atual quando você altera qualquer metadado do arquivo e não há como impor um ctime diferente. Para alterar o ctime de um arquivo, você precisa seguir um destes procedimentos:

  • Defina a hora do sistema para a hora que deseja impor, toque no arquivo e redefina a hora do sistema.
  • Modifique o kernel para adicionar uma interface para alterar o ctime.
  • Acesse a imagem do disco diretamente (por exemplo, com debugfs) e mexa nos bits do disco (não faça isso enquanto o sistema de arquivos estiver montado).

Responder2

Você tem a resposta na questão SO relacionada apontada por jw013, para extX, emdisco desmontado:

# 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

Responder3

$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

Responder4

O ctime de um arquivo é atualizado quando qualquer metadado é alterado.

$ 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

informação relacionada