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