Elenca i file in base alla data dell'ultima modifica


104

Ho una directory: /home/user/

Come posso elencare tutti i file in questa directory (compresi quelli nelle sottodirectory) e ordinarli in base alla data in cui sono stati modificati l'ultima volta?

Risposte:


172

Puoi usare:

ls -Rt

dove -Rsignifica ricorsivo (include sottodirectory) e -tsignifica "ordina per data dell'ultima modifica".


Per visualizzare un elenco di file ordinati per data di modifica, utilizzare:

ls -l -Rt

È anche possibile creare un alias per ottenere ciò:

alias lt='ls -lht'
lt

Dove -hfornisce un output più leggibile.


16
Grazie, è perfetto. Ho aggiunto anche un -l in modo da poter effettivamente vedere le date, quindi per chiunque lo cerchi più tardi, è- $ ls -lRt
Marty

4
Se lo stai facendo al prompt e desideri vedere i file modificati più di recente, considera ls -lrt[RhA]. l' -rinverte l'ordinamento, lasciando roba da poco edito in fondo alla lista ...
dmckee --- ex-moderatore gattino

Questo aggiunto a -ilati dà praticamente tutte le informazioni di cui avresti bisogno. $ ls -ilaRt
Falkenfighter

Ho ampliato questa risposta perché l'utilizzo ll -Rtera la soluzione perfetta per me poiché avevo bisogno di vedere i file per data modificati più di recente. Questo potrebbe essere utile ad altri.
Mus

@MusTheDataGuy llè non esiste e non è un comando. È principalmente un alias nella shell bash, ma non è definito nella maggior parte / alcuni /? distribuzioni Linux. Alcuni lo definiscono come alias ll='ls -l'in /etc/bash.bashrc o /etc/.bashrc. Quindi potrebbe non funzionare e potrebbe non esistere sul sistema OP. Usa ls -l -Rtalmeno, poiché lsè un comando standard definito da posix. O specifica che intendevi alias ll='ls -l'; ll -Rt.
KamilCuk

73

Se desideri un elenco principale in cui tutti i file siano ordinati insieme per data di modifica, che mostri la directory in cui si trovano, ma non raggruppati per directory , puoi utilizzare questo:

find . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '

Il risultato assomiglia molto a ls -l:

-rw-r - r-- 1 root root 3892 08/11/2009 11:03:36 /usr/share/man/man1/xmllint.1.gz
-rw-r - r-- 1 radice radice 22946 13/08/2009 11:59:20 /usr/share/man/man1/curl.1.gz
-rw-r - r-- 1 root root 728 17/08/2009 12:06:33 /usr/share/man/man1/thunderbird.1.gz
-rw-r - r-- 1 root root 873 18/08/2009 10:52:47 /usr/share/man/man1/libgnutls-config.1.gz
-rw-r - r-- 1 root root 2552 19/08/2009 02:00:34 /usr/share/man/man3/Purple.3pm.gz
-rw-r - r-- 1 radice radice 9546 19/08/2009 02:02:00 /usr/share/man/man1/pidgin.1.gz
-rw-r - r-- 1 root root 2201 19/08/2009 02:02:46 /usr/share/man/man3/Pidgin.3pm.gz
-rw-r - r-- 1 root root 926 19/08/2009 02:03:05 /usr/share/man/man1/purple-remote.1.gz
-rw-r - r-- 1 radice radice 18052 19/08/2009 04:11:47 /usr/share/man/man1/mono.1.gz
-rw-r - r-- 1 root root 1845 19/08/2009 04:11:47 /usr/share/man/man5/mono-config.5.gz

Mac OS X

Per quelli di voi che utilizzano Mac OS X, l'opzione -printf non è disponibile su BSD find (riceverete questo errore :)find: -printf: unknown primary or operator . Fortunatamente puoi installare GNU find tramite Homebrew (dovrebbe esserci un'opzione anche per Fink e Macports ):

brew install findutils

Dopo averlo installato, GNU find dovrebbe essere disponibile come file gfind. Quindi, tutto ciò che devi fare è cambiare la riga sopra in:

gfind . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '

3
Ben fatto. L'intera cosa del raggruppamento di directory con ls -R è fastidiosa.
El Yobo

1
Ottimo codice, lo script ha richiesto ca. 5 secondi per ordinare e stampare 13k foto in molte cartelle diverse (tramite Cygwin su un computer piuttosto lento).
Magnus

Oh, ora è fantastico. Per le persone (come me) che non hanno familiarità findcome l'autore, questi argomenti -printfsono direttive di formato che possono essere trovate in man find(cerca la quinta istanza di printfin quella pagina).
Owen Blacker

4
Per chiunque voglia usarlo su MacOS ma non vuole preoccuparsi di installare findutils: find . -type f -print0 | xargs -0 stat -f "%m %Sp %l %-8Su %-8Sg %8z %Sm %N" | sort | cut -f 2- -d' 'ti darà più o meno lo stesso output su MacOS usando solo utilità integrate
Jaymon

sort -rper invertire l'ordinamento e avere in primo piano i file modificati più di recente.
maryisdead

0

MAC OSX 2019

Se non ti interessa a che ora è stato creato ma vuoi che il tuo elenco sia ordinato, usa questo comando

==> ls -t

Se vuoi ordinare e vedere la data e le informazioni sull'utente usa questo comando

===> ls -lt


0

Per gli zshutenti, potresti anche usare qualificatori glob (documentati anche su man zshexpn):

echo *(om)

Dove osta per ordinamento, in alto e mindica l'ora dell'ultima modifica .

Questo può essere utile se usato in un ciclo for o in un altro comando:

for file in *(^om); do
  [ -e "$file" ] || continue
  # do something with file orderer from least recently modified to last modified
done

O incatenato con un altro qualificatore glob:

last_modified_file=(*(om[1]))
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.