Ja, das können Sie mit GNU machen find
. Wenn Ihre Dateinamen keine Zeilenumbrüche enthalten, können Sie Folgendes tun:
find -printf '%T@ %p\n' | sort -gk1,1
Erläuterung
Mit der -printf
Option find
können alle Arten von Informationen gedruckt werden. In diesem Fall verwenden wir:
%Tk File's last modification time in the format specified by
k, which is the same as for %A.
@ seconds since Jan. 1, 1970, 00:00 GMT, with fractional part.
%p File's name.
So %T@ %p\n
druckt die Zeitpunkt der letzten Änderung der Datei in Sekunden seit der Epoche ( %T@
), ein Leerzeichen und dann den Dateinamen ( %p
).
Diese werden dann übergeben, an sort
die -n
nur im ersten Feld ( -k1,1
) numerisch ( ) sortiert werden soll .
Beachten Sie, dass dadurch alle Dateien und Verzeichnisse zurückgegeben werden. Um es nur auf reguläre Dateien zu beschränken (keine Verzeichnisse, Gerätedateien, Links usw.), fügen Sie -type f
es Ihrem find
Befehl hinzu.
Um lesbare Daten zu erhalten, können Sie die Ausgabe mit GNU verarbeiten date
:
find -printf '%T@ %p\t\n' | sort -gk1,1 |
perl -lne 's/([^ ]*)//;chomp($i=`date -d \@$1`); print "$i $_"'
Hier perl
ersetzt der Befehl die erste Zeichenfolge von Nicht-Leerzeichen (das Datum) durch sich selbst, wie von GNU verarbeitet date
.
Das Obige schlägt für Dateinamen fehl, die Zeilenumbrüche enthalten. Verwenden Sie zum Umgang mit Zeilenumbrüchen:
find -printf '%p\t%T@\0' | sort -zt$'\t' -nk2 | tr '\0' '\n'
Das ist das gleiche, außer dass find
ein \0
statt eines \n
am Ende jedes Dateinamens ausgegeben wird . GNU sort
kann mit nulltrennenden Ausgaben umgehen, sodass es weiterhin korrekt sortieren kann. Der letzte tr
Befehl übersetzt das \0
Zurück in \n
.