Voglio scoprire la data di creazione di un particolare file, non la data di modifica o la data di accesso.
Ho provato con ls -ltrh
e stat filename
.
Risposta accettata:
stat -c '%w' file
su filesystem che memorizzano l'ora di creazione.
Nota che su Linux questo richiede coreutils
8.31, glibc
2.28 e kernel versione 4.11 o successive.
Lo standard POSIX definisce solo tre distinti timestamp da memorizzare per ciascun file:l'ora dell'ultimo accesso ai dati, l'ora dell'ultima modifica dei dati e l'ora dell'ultima modifica dello stato del file.
I moderni filesystem Linux, come ext4, Btrfs, XFS (v5 e successivi) e JFS, memorizzano l'ora di creazione del file (nota anche come ora di nascita), ma usano nomi diversi per il campo in questione (crtime
in ext4/XFS, otime
in Btrfs e JFS). Linux fornisce l'interfaccia di chiamata di sistema statx(2) per recuperare l'ora di nascita del file per i filesystem che lo supportano dalla versione del kernel 4.11. (Quindi, anche quando il supporto per la creazione è stato aggiunto a un filesystem, alcuni kernel distribuiti non lo hanno supportato immediatamente, anche dopo aver aggiunto il supporto nominale per quella versione del filesystem, ad esempio XFS v5.)
Come hanno sottolineato Craig Sanders e Mohsen Pahlevanzadeh, stat
supporta il %w
e %W
specificatori di formato per visualizzare l'ora di nascita del file (rispettivamente in formato leggibile e in secondi da Epoch) prima di coreutils
versione 8.31. Tuttavia, coreutils
stat
usa statx()
chiamata di sistema dove disponibile per recuperare l'ora di nascita solo dalla versione 8.31.
Prima di coreutils
versione 8.31 stat
ha avuto accesso all'ora di nascita tramite get_stat_birthtime()
fornito da gnulib (in lib/stat-time.h
), che ottiene l'ora di nascita da st_birthtime
e st_birthtimensec
campi della stat
struttura restituita da stat()
chiamata di sistema. Mentre ad esempio i sistemi BSD (e nell'estensione OS X) forniscono st_birthtime
tramite stat
, Linux no. Ecco perché stat -c '%w' file
output -
(che indica un'ora di creazione sconosciuta) su Linux prima di coreutils
8.31 anche per filesystem che memorizzano internamente il tempo di creazione.
Come sottolinea Stephane Chazelas, alcuni filesystem, come ntfs-3g, espongono i tempi di creazione dei file tramite attributi di file estesi.