2010-09-28 13 views
5

Ho bisogno di creare un elenco di file che si trovano sul mio disco rigido in ordine di quando sono arrivati ​​sul disco rigido. Per fare ciò, ho usato il seguente:Ordinare i file in base al tempo di creazione al millisecondo in Bash

ls -lat 

che elenca tutti i file in ordine di data/ora, però, solo per loro ordini al secondo più vicino. Il problema qui è che ci sono migliaia di file e ogni tanto, alcuni di loro vengono raggruppati insieme nello stesso secondo. Ho bisogno del esatto ordinamento corretto. Sto indovinando il modo più semplice per farlo è quello di ottenere il tempo di creazione per il secondo milli (o forse nano). Per fare questo, ho provato con la seguente:

stat $myfile 

a guardare la data di modifica, ma mostra sempre ore: minuti: second.00000000000.

C'è un modo per farlo? Grazie, Rik

risposta

3

La precisione dipende dal file system in uso, ma anche con un sistema di file ad alta precisione, come ext4, l'implementazione standard di stat usa time_t che ha una risoluzione di 1 secondo.

Se si ha accesso all'origine del programma che sputa tutti questi file, provare a impostare un timestamp come parte del nome file e quindi ordinare sul nome file anziché sul tempo di modifica.

2

probabilmente dovrete scrivere il proprio comando stat, utilizzando la funzione di stat(2)

2

Non sono sicuro che sia possibile. Il mio ragionamento:

Se si osserva la chiamata alla funzione stat(), si vede che restituisce una struttura contenente informazioni su un file. Uno dei suoi membri è questo:

time_t st_mtime; /* time of last modification */ 

E se si guarda alla struttura di time_t, beh, wikipedia says this:

Unix e sistemi POSIX-compliant attuare time_t come un numero intero o real-floating tipo (tipicamente un numero intero 32 o 64 bit) che rappresenta il numero di secondi trascorsi dall'inizio dell'epoca Unix ...

Ciò significa che il tempo di stat() è in termini di secondi, non di millisecondi. Non ho visto come ogni inode memorizza le informazioni sui file, ma potrebbe non memorizzare informazioni fino al millisecondo.

Un'alternativa potrebbe essere quella di aggiungere il valore di mill/microsecond al nome file stesso quando vengono creati e ordinarli in questo modo?

Problemi correlati