Wie kann ich das Finden von Dateien in umgekehrter chronologischer Reihenfolge veranlassen?

17

Ich möchte Dateien in Unterverzeichnissen finden, die nach Zeitstempel (der Erstellung) sortiert sind, wobei der neueste zuerst angezeigt wird.

Ich habe mir die Manpage angesehen, aber es scheint, als ob Sie nur nach Zeitstempel filtern können, anstatt nach Zeitstempel zu sortieren.

An welche Optionen kann ich mich wenden find, um dies zu erreichen? Wie kann ich es alternativ mit einem anderen Tool kombinieren sort, um nach Zeitstempel zu sortieren?

merlin2011
quelle
1
Sie können findnichts in einer bestimmten sortierten Reihenfolge tun, außer zwischen einer Tiefensuche und einer Breitensuche zu wählen.
Jonathan Leffler
@ merlin2011, überprüfen Sie hier Ihre Antwortauswahl. Die aktuell ausgewählte Antwort ist fehlerhaft (generiert Ausgaben, die nicht richtig sortiert sind), wenn mehr Dateien gefunden wurden, findals an eine einzelne Instanz von übergeben werden können ls.
Charles Duffy
@CharlesDuffy, Danke für den Hinweis! Ich habe die akzeptierten Antworten aktualisiert.
merlin2011

Antworten:

32

Die Lösung von Paul ist im Allgemeinen in Ordnung, beinhaltet jedoch mehr E / A als nur:

find bin/ -type f -printf '%Ts\t%p\n' | sort -nr | cut -f2
Peter Mortensen
quelle
Was ist, wenn findMillionen von Dateien zurückgegeben werden? Wird sort nicht alle als eine sehr lange Liste sortieren? Wird es immer noch effizient sein? (Anstatt jedes Verzeichnis einzeln zu sortieren.)
Peter Mortensen
1
Funktioniert nicht mit lustigen Zeichen in Dateinamen wie Newlines
Boris Brodski
2
Dies verdient nur einen Kommentar zur Antwort von user7385, aber ich habe nicht den Ruf, dies zu tun. find bin/ -type f -printf '%Ts\t%p\0' | sort -nrz | cut -f2 -z | xargs -0 lsNeue Versionen von cuthaben die Option -z, sodass Dateinamen mit Zeilenumbrüchen funktionieren.
MattBlissett
Die Anzahl der E / A ist nicht einmal der Hauptgrund, diese Antwort zu bevorzugen - Korrektheit ist eine viel kritischere Unterscheidung. Der xargs -0 ls -tAnsatz funktioniert nicht richtig, wenn es so viele Dateien gibt, xargsdie lsmehr als einmal gestartet werden müssen, aber dieser Ansatz funktioniert weiterhin.
Charles Duffy
@PeterMortensen: "Alle als eine sehr lange Liste sortieren" ist die einzige Möglichkeit, sie zu sortieren, die tatsächlich ein korrektes Ergebnis liefert. Darüber hinaus "sortiert" die andere / akzeptierte Antwort auch nicht "jedes Verzeichnis unabhängig voneinander" (wenn man nur ein einziges Verzeichnis ohne Rekursion sortieren möchte, könnte man -maxdepth 1das verwenden find).
Charles Duffy