Wie sortiere ich die Ausgabe von 'locate' nach Änderungszeit der Datei?

366
Metamorphic

Wenn ich den locateBefehl verwende, wünsche ich mir oft, dass die Ausgabe in umgekehrter chronologischer Reihenfolge sortiert wurde, genau wie bei ls -rtc. Was ist der einfachste Weg, dies zu erreichen?

0
Mir wurde klar, dass diese Antwort relevant ist: http://superuser.com/a/251432/576570 Es scheint jedoch, als sollte man "--full-time" an "ls" übergeben, um ein Feld zu erhalten, das sortierbar ist (als gut wie `-d`, damit Sie keine Verzeichnisse auflisten). Metamorphic vor 8 Jahren 1

1 Antwort auf die Frage

1
pwes

Der einfachste Weg, dies zu erreichen, besteht darin, Ihre Dateiliste durch eine Folge von Befehlen zu pfeifen:

locate your-search-term | xargs stat --printf '%.Y\t%n\n' | sort -n -r | cut -f 2- 

In der ersten Zeile werden Ihre Dateien gesucht - das wissen Sie bereits. Die zweite Zeile stat-sa-Datei gibt den letzten Änderungszeitpunkt (Sekunden) und den Dateipfad für jeden gefundenen Dateinamen aus. Die dritte Zeile sortiert die Zeilen numerisch absteigend. Die letzte Zeile verkürzt die Änderungszeit und das Trennzeichen von jeder Zeile und lässt den ursprünglichen Pfad zurück.

Danke, ich werde dies in ein kleines Skript in meinem Home-Verzeichnis einfügen. Ich wusste vorher nicht über `stat`. Übrigens verwende ich `locate -0` und` xargs -0`, damit Dateinamen mit Leerzeichen in Ordnung kommen. Metamorphic vor 8 Jahren 1
Dies ist eine bewährte Methode (dh NIL-getrennte Pfade), wenn Sie Leerraum in den Pfaden erwarten. Esp. Zeilenumbrüche können problematisch sein, sie zerstören "sort" (was durch das Hinzufügen von "-z" -Schalter überwunden werden kann) und "cut" (die möglicherweise durch das Ersetzen von "cut" durch "perl -p0e 's / ^ \ S" überwunden werden können) * \ s + // '`) pwes vor 8 Jahren 0
Ich habe ein Skript mit dem Namen `time-sort-files` mit Inhalt erstellt:` tr '\ n' '\ 0' | xargs -0 stat --printf '% .Z \ t% z \ t% n \ 0' | sort -zn | schneide -z -f 2- | tr '\ 0' '\ n' | sed 's /: .. \ .. * \ t / \ t /' `Es werden auch Daten neben jeder Datei gedruckt. Das anfängliche "tr" macht es möglich, eine normale, durch Zeilenumbrüche getrennte Dateiliste in "time-sort-files" zu übertragen. Der "Sort" fehlt "-r", weil ich eigentlich eine chronologische Reihenfolge wollte (ich sagte versehentlich "umgekehrtes"!), Wie "ls -rt". Danke noch einmal! Metamorphic vor 8 Jahren 1