Como posso alterar o horário dos arquivos “modificados pela última vez” (ou “última alteração”) no Linux?

1

Eu tentei touch -t , mas sua precisão é de apenas um segundo: quando eu uso stat , vejo que há 9 dígitos todos zero após o decimal ( . ):

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

Como posso alterar o tempo de "última modificação" e "última alteração" dos arquivos para a precisão de 9 números após o ponto decimal?

    
por lily 22.11.2015 / 19:02

2 respostas

2

Use o -d flag.

touch -m -d '2015-01-01 01:01:01.123456789' file.ext
    
por 22.11.2015 / 19:14
1

O comando touch permite que você altere a hora modificação e / ou o tempo de acesso . Você não pode definir a hora de alterar arbitrariamente: isso é definido para a hora em que você alterar qualquer uma das outras duas vezes.

A razão para isso é que touch depende de uma chamada de sistema que pode fazer apenas as combinações mencionadas acima. O código-fonte (no GNU coreutils) usa este trecho:

  ok = (fdutimensat (fd, AT_FDCWD, (fd == STDOUT_FILENO ? NULL : file), t,
                     (no_dereference && fd == -1) ? AT_SYMLINK_NOFOLLOW : 0)
        == 0);

que por sua vez (consulte source ) chama futimens ou utimensat . Essas funções são POSIX , que anota

Upon completion, futimens() and utimensat() shall mark the last file status change timestamp for update.

A mudança de status é o que você não pode definir arbitrariamente.

As duas funções POSIX aceitam timespec parâmetros, que fornecem resolução em nanossegundos. O sistema de arquivos do seu computador pode ou não suportar isso (embora o resultado de stat indique que pode).

A opção -t de estilo POSIX padrão é como notada limitada à resolução de 1 segundo. No entanto (ainda POSIX ) a opção -d fornece frações de um segundo:

YYYY-MM-DDThh:mm:SS[.frac][tz]

O GNU coreutils suporta esta opção -d , permitindo uma resolução de nanossegundos. A documentação para touch dá como exemplo

--date="2004-02-27 14:19:13.489392193 +0530"

(onde --date é um nome longo equivalente a -d ).

    
por 23.11.2015 / 02:39