Come posso cambiare il tempo "last modified" (o "last modified") dei file su Linux?


1

Provai touch -t, ma la sua precisione è solo un secondo: quando uso stat, Vedo che ci sono 9 cifre a zero dopo il decimale ( . ):

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

Come posso modificare l'ora di "ultima modifica" e "ultima modifica" dei file con la precisione di 9 numeri dopo il punto decimale?

Risposte:


2

Utilizzare il -d bandiera invece.

touch -m -d '2015-01-01 01:01:01.123456789' file.ext

che ne dici di last change tempo?
lily

Quando modifichi il contenuto di un file, vengono aggiornati sia mtime che ctime. touch -m cambierà entrambe le volte. Quando si rinomina un file o si modificano le autorizzazioni, solo il ctime viene aggiornato.
glenn jackman

@glennjackman intendo come modificare il last change tempo, il comando @Patriceleversque ha dato è per modificare il last modify solo tempo
lily

Oh, capisco. Interessante. Quando si specifica un'ora, il tempo m cambia in quel momento e il ctime cambia all'ora corrente. Dato che il ctime riflette davvero l'inode del file, immagino che il SO (o il filesystem) non ti permetta di impostare il ctime in un tempo specificato.
glenn jackman

1

Il touch comando ti permette di modificare il modifica tempo e / o il accesso tempo. Non è possibile impostare il modificare tempo arbitrario: è impostato sul momento in cui si modifica una delle altre due volte.

La ragione di questo è quello touch fa affidamento su una chiamata di sistema che può fare solo le combinazioni sopra annotate. Il codice sorgente (in GNU coreutils) usa questo blocco:

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

che a sua volta (vedi fonte ) chiama futimens o utimensat. Queste funzioni sono entrambe POSIX , che nota

Al completamento, futimens() e utimensat() deve segnare l'ultimo file cambiamento di stato timestamp per l'aggiornamento.

Il cambiamento di stato timestamp è ciò che non puoi impostare in modo arbitrario.

Le due funzioni POSIX accettano timespec parametri, che forniscono una risoluzione in nanosecondi. Il filesystem del tuo computer può o non può supportarlo (anche se il risultato da stat indica che potrebbe).

Lo stile POSIX predefinito -t l'opzione è limitata alla risoluzione di 1 secondo. Tuttavia (ancora POSIX ) il -d opzione prevede frazioni di un secondo:

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

GNU coreutils supporta questo -d opzione, che consente la risoluzione di nanosecondi. Il documentazione per touch dà come esempio

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

(dove --date è un nome lungo equivalente a -d ).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.