Möchten Sie Dateien nach Aktualisierungsdatum einschließlich Unterverzeichnissen sortieren

17

Ich möchte nur Dateien nach Aktualisierungsdatum einschließlich Unterverzeichnissen sortieren.

Ich habe es herausgefunden ls -lrtR | grep ^-. Es scheint jedoch nicht nach Aktualisierungsdaten zu sortieren.

Und ich muss diese Liste in eine Datei speichern. Ist es möglich?

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

Ich meine, die ganze Liste ist nicht nach Datum sortiert, sondern zuerst nach Ordner und dann nach Datum.

Ich möchte eine Liste, sortiert nach Datum, mit allen Unterverzeichnissen.

Deckard
quelle

Antworten:

12

Ich bin mir nicht sicher, was genau du damit meinst update dates, aber du verwendest eine -rOption, die nach Ansicht des Menschen dies tut -

-r Kehre die Sortierreihenfolge um, um die lexikografische Reihenfolge oder die ältesten Einträge zuerst (oder die größten Dateien zuletzt, wenn sie mit der Sortierreihenfolge kombiniert werden) umzukehren

Ich denke, das sollte für Sie gut genug sein, wenn Sie Dateien nach Zeit sortiert benötigen.

ls -lRt

Wenn Sie nicht alle anderen bis lsdahin aufgelisteten Dinge benötigen , können Sie Folgendes verwenden:

ls -1Rt

Um das Ergebnis in einer Datei zu erfassen, können Sie den Umleitungsoperator verwenden >und einen Dateinamen vergeben. Sie können also so etwas tun -

ls -lRt > sortedfile.list

Aktualisieren:

find . -type f -exec ls -lt {} +
Jaypal Singh
quelle
Ich meine, das letzte Mal, als eine Datei geändert wurde :)
Das Ergebnis wird nach Ordner und Datum sortiert. Ich möchte nach Datum und Ordner sortieren. Ist das möglich?
Entschuldigung, können Sie mir bitte eine Ausgabe zeigen? Ich habe die Sortierung der Ordner nicht genau verfolgt, wenn Sie sie verwendet haben ls -lrt.
Jaypal Singh
// Jaypal Singh, ich habe meine Ausgabe auf meine Frage aktualisiert ↑ :). Ich hoffe wirklich, dass Sie es verstehen und entschuldige mich für mein schlechtes Englisch.
1
Dies schlägt fehl, wenn die Dateiliste lang genug ist xargs, um mehrere Aufrufe zu erzwingen ls, da dann die Dateien nur innerhalb jedes lsAufrufs ordnungsgemäß sortiert werden, aber keine kohärente globale Reihenfolge in der Ausgabe vorhanden ist.
Brandon Rhodes
19

Mit ls rekursiviert -R Verzeichnisse und -t sortiert nach Änderungen. Es durchläuft jedoch Verzeichnisse rekursiv und wendet -t auf jedes Verzeichnis an. Es werden nicht alle Dateien aus allen Verzeichnissen gesammelt und dann sortiert. (Soweit ich weiß, ist letzteres das, was Sie wollen)

Mit gnu find (1) können Sie das Ausgabeformat so festlegen, dass es die Anzahl der Sekunden seit der Epoche und den Dateinamen enthält. Anschließend können Sie dies an sort (1) weiterleiten.

find . -type f -printf "%T@ %f\n" | sort -n > out.txt
Rolf Rander
quelle
Ja GNU findhilft. Aber OP arbeitet an AIXMaschinen und GNU findstand ihm nicht zur Verfügung.
Jaypal Singh
Es ist zu schade, lsdass vor dem Sortieren keine Dateien angesammelt werden können. lsist so schnell im Vergleich zu find.
Nathan GoFundMonica Arthur
lsund findliest die gleichen Daten, also kann ich mir keinen Grund vorstellen, warum ich wesentlich schneller sein sollte als zu finden. Auf meinem System ist die Suche 5-mal schneller (Durchsuchen von ungefähr einer halben Million Dateien)
Rolf Rander
7
Möglicherweise möchten Sie ein vollständiges Datum / eine vollständige Uhrzeit und nicht nur den Dateinamen, sondern auch den Pfad in der Ausgabe. Ändern Sie in diesem Fall die Formatierungszeichenfolge: find . -type f -printf "%T@ %Tc %p\n" | sort -n > out.txtGeben Sie Ausgabeeinträge wie z 1427913836.2330520210 wed 1 apr 2015 20:43:56 ./subdir/file.txt.
Carl
Groß. Das hat mir wirklich geholfen. Ich habe lange nach einer Möglichkeit gesucht, in Unterverzeichnisse zu sortieren!
Bhu Boue Vidya