Come posso fare in modo che `find` trova i file in ordine cronologico inverso?


17

Voglio trovare i file nelle sottodirectory ordinate per timestamp (di creazione), con il più recente per primo.

Ho guardato la pagina man ma sembra che ti permetta solo di filtrare per timestamp piuttosto che per ordine di timestamp.

A quali opzioni posso passare findper raggiungere questo obiettivo? In alternativa, come posso combinarlo con un altro strumento, come sortordinare per timestamp?


1
Non puoi findfare nulla in un particolare ordine ordinato, oltre a scegliere tra una ricerca approfondita e una ricerca approfondita.
Jonathan Leffler,

@ merlin2011, rivedi qui la tua selezione di risposte: la risposta attualmente selezionata è errata (genererà output che non sono effettivamente ordinati correttamente) quando vengono trovati più file di findquanti possono essere passati a una singola istanza di ls.
Charles Duffy,

@CharlesDuffy, grazie per la nota! Ho aggiornato le risposte accettate.
merlin2011,

Risposte:


32

Sebbene la soluzione di Paul sia generalmente OK, comporta più I / O che semplicemente:

find bin/ -type f -printf '%Ts\t%p\n' | sort -nr | cut -f2

Cosa succede se findrestituisce milioni di file? L'ordinamento non li ordinerà tutti come un elenco molto lungo? Sarà ancora efficiente? (Invece di ordinare ciascuna directory in modo indipendente.)
Peter Mortensen,

1
Non funziona con personaggi divertenti nei nomi dei file, come le newline
Boris Brodski il

2
Questo merita solo un commento sulla risposta di user7385, ma non ho la reputazione di farlo. find bin/ -type f -printf '%Ts\t%p\0' | sort -nrz | cut -f2 -z | xargs -0 lsLe nuove versioni di cuthanno l'opzione -z, quindi i nomi di file con le nuove righe funzionerebbero.
MattBlissett,

La quantità di I / O non è nemmeno il motivo principale per preferire questa risposta: la correttezza è una distinzione molto più critica. L' xargs -0 ls -tapproccio non funzionerà correttamente quando ci sono così tanti file che xargsdevono essere avviati lspiù di una volta, ma questo approccio continuerà a funzionare.
Charles Duffy,

@PeterMortensen, "ordinandoli tutti come un lungo elenco" è l'unico modo per ordinarli che in realtà restituisce un risultato corretto. Inoltre, l'altra / risposta accettata non "ordina ciascuna directory in modo indipendente" (se si volesse ordinare solo una singola directory senza ricorrere, si potrebbe usare -maxdepth 1sul find).
Charles Duffy,
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.