Desideri ordinare i file per data di aggiornamento, comprese le sottodirectory


17

Voglio ordinare solo i file in base alle date di aggiornamento, comprese le sottodirectory.

Ho scoperto ls -lrtR | grep ^-. ma non sembra ordinare in base alle date di aggiornamento.

E ho bisogno di salvare questo elenco in un file. È possibile?

Apr 01 2010  InsideDoosanServiceImpl.class  // in A directory
Apr 08 2010  MainController.class  // in B directory
Apr 07 2010  RecommendController.class  // in B directory
Apr 01 2010  MainDao.class  // in B directory

Voglio dire l'intero elenco non è ordinato per data, ma prima ordinato per cartella e ordinato per data.

Voglio un elenco ordinato per data prima che includa tutte le sottodirectory.

Risposte:


12

Non sono sicuro di cosa significhi esattamente update dates, ma stai usando l' -ropzione che secondo l'uomo fa questo -

-r Inverti l'ordine dell'ordinamento per ottenere prima l'ordine lessicografico inverso o prima le voci più vecchie (o l'ultimo file più grande, se combinato con l'ordinamento per dimensione

Penso che questo dovrebbe essere abbastanza buono per te se hai bisogno di file ordinati per tempo.

ls -lRt

Se non hai bisogno di tutte le altre cose elencate da lsallora puoi usare -

ls -1Rt

Per acquisire il risultato in un file, è possibile utilizzare l'operatore di reindirizzamento >e assegnare un nome al file. Quindi puoi fare qualcosa del genere -

ls -lRt > sortedfile.list

Aggiornare:

find . -type f -exec ls -lt {} +

Intendo l'ultima volta che un file è stato modificato :)

Il risultato dell'ordinamento è ordinato per cartella e data. Voglio ordinare per data e cartella .. è possibile?

Scusa, puoi mostrarmi un po 'di output? Non ho seguito abbastanza l'ordinamento della cartella se hai usato ls -lrt.
jaypal singh

// Jaypal Singh, ho aggiornato il mio output con la mia calma ↑ :). Spero davvero che tu lo capisca e mi dispiace per il mio cattivo inglese.

1
Ciò non riesce se l'elenco dei file è sufficientemente lungo da forzare xargsl'esecuzione di più chiamate ls, poiché i file vengono ordinati correttamente solo all'interno di ciascuna chiamata lsma mancano di un ordine globale coerente nell'output.
Brandon Rhodes,

19

Con ls, -R richiamerà le directory e -t ordinerà per modifica. Tuttavia, attraversa ricorsivamente le directory e applica -t a ciascuna directory. Non accumula tutti i file da tutte le directory e quindi ordina. (Per quanto ho capito, quest'ultimo è quello che vuoi)

Con gnu find (1) è possibile specificare il formato dell'output per includere il numero di secondi dall'epoca e il nome del file, quindi è possibile reindirizzarlo per ordinare (1).

find . -type f -printf "%T@ %f\n" | sort -n > out.txt

GNU find, aiuta. Ma OP funziona su AIXmacchine quindi GNU findnon era disponibile per lui.
jaypal singh

È un peccato che lsnon si possa fare per accumulare file prima dell'ordinamento. lsè così veloce rispetto a find.
Nathan Reinstate Monica Arthur il

lse findlegge gli stessi dati, quindi non posso immaginare alcun motivo per cui dovrebbe essere considerevolmente più veloce di trovare. Sul mio sistema find è 5 volte più veloce (ricerca in circa mezzo milione di file)
Rolf Rander,

7
Potresti volere una data / ora completa e non solo il nome del file ma anche il percorso nell'output, in tal caso, modificare la stringa di formattazione: find . -type f -printf "%T@ %Tc %p\n" | sort -n > out.txtprodurre voci di output come 1427913836.2330520210 wed 1 apr 2015 20:43:56 ./subdir/file.txt.
Carl,

Grande. Questo mi ha davvero aiutato. Ho cercato un modo per ordinare in sottodirectory da secoli!
Bhu Boue Vidya,
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.