Use o -d flag.
touch -m -d '2015-01-01 01:01:01.123456789' file.ext
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?
Use o -d flag.
touch -m -d '2015-01-01 01:01:01.123456789' file.ext
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()andutimensat()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 ).
Tags linux shell filesystems