Listen Sie die Dateien nach dem Datum der letzten Bearbeitung auf

104

Ich habe ein Verzeichnis: /home/user/

Wie kann ich jede Datei in diesem Verzeichnis (einschließlich der Dateien in Unterverzeichnissen) auflisten und nach dem Datum sortieren, an dem sie zuletzt geändert wurden?

Marty
quelle

Antworten:

171

Sie können verwenden:

ls -Rt

Dabei -Rbedeutet rekursiv (einschließlich Unterverzeichnisse) und -tbedeutet "Sortieren nach dem Datum der letzten Änderung".


Verwenden Sie Folgendes, um eine Liste der nach Änderungsdatum sortierten Dateien anzuzeigen:

ls -l -Rt

Dazu kann auch ein Alias ​​erstellt werden:

alias lt='ls -lht'
lt

Wo -hgibt eine besser lesbare Ausgabe.

Mipadi
quelle
16
Danke, das ist perfekt. Ich habe dort auch ein -l hinzugefügt, damit ich die Daten tatsächlich sehen kann. Für jeden, der dies später sucht, ist es - $ ls -lRt
Marty
4
Wenn Sie dies an der Eingabeaufforderung tun und die zuletzt geänderten Dateien anzeigen möchten, ziehen Sie dies in Betracht ls -lrt[RhA]. das -rkehrt die Sortierreihenfolge um und lässt kürzlich bearbeitete Sachen am Ende der Liste ...
dmckee --- Ex-Moderator Kätzchen
Dies fügt -ilaIhnen so ziemlich alle Informationen hinzu, die Sie benötigen würden. $ ls -ilaRt
Falkenfighter
Ich habe diese Antwort erweitert, da die Verwendung ll -Rtdie perfekte Lösung für mich war, da ich die Dateien nach dem Datum der letzten Änderung anzeigen musste. Dies kann für andere hilfreich sein.
Mus
@MusTheDataGuy llist nicht vorhanden und kein Befehl. Es ist meistens ein Alias ​​in der Bash-Shell, aber in den meisten / einigen /? Nicht definiert. Linux-Distributionen. Einige definieren es als alias ll='ls -l'in /etc/bash.bashrc oder /etc/.bashrc. Daher funktioniert es möglicherweise nicht und ist auf dem OP-System möglicherweise nicht vorhanden. Verwenden Sie ls -l -Rtmindestens lseinen Standardbefehl, wie er von posix definiert wird. Oder geben Sie an, was Sie gemeint haben alias ll='ls -l'; ll -Rt.
KamilCuk
73

Wenn Sie eine Hauptliste wünschen, in der alle Dateien nach Änderungsdatum sortiert sind und das Verzeichnis anzeigen, in dem sie sich befinden, aber nicht nach Verzeichnis gruppiert sind , können Sie Folgendes verwenden:

find . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '

Das Ergebnis sieht sehr ähnlich aus ls -l:

-rw-r - r-- 1 root root 3892 08/11/2009 11:03:36 /usr/share/man/man1/xmllint.1.gz
-rw-r - r-- 1 root root 22946 13.08.2009 11:59:20 /usr/share/man/man1/curl.1.gz
-rw-r - r-- 1 root root 728 17.08.2009 12:06:33 /usr/share/man/man1/thunderbird.1.gz
-rw-r - r-- 1 root root 873 18.08.2009 10:52:47 /usr/share/man/man1/libgnutls-config.1.gz
-rw-r - r-- 1 root root 2552 19.08.2009 02:00:34 /usr/share/man/man3/Purple.3pm.gz
-rw-r - r-- 1 root root 9546 19.08.2009 02:02:00 /usr/share/man/man1/pidgin.1.gz
-rw-r - r-- 1 root root 2201 19.08.2009 02:02:46 /usr/share/man/man3/Pidgin.3pm.gz
-rw-r - r-- 1 root root 926 19.08.2009 02:03:05 /usr/share/man/man1/purple-remote.1.gz
-rw-r - r-- 1 root root 18052 19.08.2009 04:11:47 /usr/share/man/man1/mono.1.gz
-rw-r - r-- 1 root root 1845 19.08.2009 04:11:47 /usr/share/man/man5/mono-config.5.gz

Mac OS X

Für diejenigen unter Ihnen, die Mac OS X verwenden, ist die Option -printf in BSD find nicht verfügbar (Sie erhalten diesen Fehler :)find: -printf: unknown primary or operator . Glücklicherweise können Sie GNU find über Homebrew installieren (es sollte auch eine Option für Fink und Macports geben ):

brew install findutils

Nach der Installation sollte Ihnen der GNU-Fund als zur Verfügung stehen gfind. Alles, was Sie tun müssen, ist die obige Zeile zu ändern in:

gfind . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '
Bis auf weiteres angehalten.
quelle
3
Schön. Die ganze Sache mit der Verzeichnisgruppierung mit ls -R ist nervig.
El Yobo
1
Toller Code, das Skript hat ca. 5 Sekunden zum Sortieren und Ausdrucken von 13.000 Fotos in vielen verschiedenen Ordnern (über Cygwin auf einem recht langsamen Computer).
Magnus
Oh, das ist großartig. Für Leute (wie mich), die nicht so vertraut sind findwie der Autor, sind diese Argumente -printfFormatanweisungen, die in gefunden werden können man find(Suche nach der fünften Instanz printfauf dieser Seite).
Owen Blacker
4
Für alle, die dies unter MacOS verwenden möchten, sich aber nicht die Mühe machen möchten, Findutils zu installieren: find . -type f -print0 | xargs -0 stat -f "%m %Sp %l %-8Su %-8Sg %8z %Sm %N" | sort | cut -f 2- -d' 'Sie erhalten unter MacOS ungefähr die gleiche Ausgabe , wenn Sie nur integrierte Dienstprogramme verwenden
Jaymon,
sort -rum die Sortierung umzukehren und die zuletzt geänderten Dateien oben zu haben.
Maryisdead
0

MAC OSX 2019

Wenn Sie sich nicht darum kümmern, wann es erstellt wurde, aber Ihre Liste sortiert werden soll, verwenden Sie diesen Befehl

==> ls -t

Wenn Sie Datum und Benutzerinformationen bestellen und anzeigen möchten, verwenden Sie diesen Befehl

===> ls -lt

Mussa Charles
quelle
0

Für zshBenutzer können Sie auch Glob-Qualifizierer verwenden (ebenfalls dokumentiert am man zshexpn):

echo *(om)

Wo osteht für Sortierreihenfolge, oben und msteht für die letzte Änderungszeit .

Dies kann nützlich sein, wenn es in einer for-Schleife oder einem anderen Befehl verwendet wird:

for file in *(^om); do
  [ -e "$file" ] || continue
  # do something with file orderer from least recently modified to last modified
done

Oder mit einem anderen Glob-Qualifier verkettet:

last_modified_file=(*(om[1]))
Ulysse BN
quelle