Neueste Dateien suchen

Neueste Dateien suchen

Wie finde ich die zuletzt aufgerufene Datei in einem bestimmten Verzeichnis heraus?

Mit dem Befehl kann ich findalle Dateien auflisten, die in den letzten nMinuten geändert/aufgerufen wurden. Aber in meinem Fall bin ich mir nicht sicher, wann die letzte Datei geändert/aufgerufen wurde. Ich muss lediglich alle Dateien auflisten, die vor Kurzem aufgerufen/geändert wurden, und zwar unter allen anderen Unterdateien oder Unterverzeichnissen, beispielsweise sortiert nach Zugriffs-/Änderungszeitpunkt.

Ist das möglich?

Antwort1

So drucken Sie die letzten 3 aufgerufenen Dateien (sortiert von der zuletzt aufgerufenen Datei bis zur drittletzten aufgerufenen Datei):

find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'

So drucken Sie die letzten 3 geänderten Dateien (sortiert von der zuletzt geänderten Datei bis zur drittletzten geänderten Datei):

find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
  • find . -type f -exec stat -c '%X %n' {} \;: druckt die Zeit des letzten Zugriffs, gefolgt vom Dateipfad für jede Datei in der aktuellen Verzeichnishierarchie;
  • find . -type f -exec stat -c '%Y %n' {} \;: druckt den Zeitpunkt der letzten Änderung, gefolgt vom Dateipfad für jede Datei in der aktuellen Verzeichnishierarchie;
  • sort -nr: sortiert in umgekehrter numerischer Reihenfolge;
  • cut -d' ' -f2-: druckt alle durch Leerzeichen getrennten Felder ab dem zweiten Feld;
  • awk 'NR==1,NR==3 {print}': druckt Zeilen im Bereich Nr. 1-3.

Sie können die Anzahl der anzuzeigenden Dateien ändern, indem Sie 3 durch die gewünschte Anzahl von Dateien in ersetzen awk 'NR==1,NR==3 {print}'.

Diese Antwort basiert auf der GNU-Version von stat, daher müssen Benutzer auf BSD-basierten Systemen die Formatzeichenfolge der statBefehle ändern, damit sie die relevanten Zeitstempel drucken.

~ % touch file\ 1
~ % touch file\ 2
~ % touch file\ 3
~ % find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 3
./file 2
./file 1
~ % find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 3
./file 2
./file 1
~ % cat file\ 1
~ % find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 1
./file 3
./file 2
~ % find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 3
./file 2
./file 1
~ % touch file\ 2
~ % find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 2
./file 1
./file 3
~ % find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 2
./file 3
./file 1

Antwort2

Wenn Sie die Dateien in einem bestimmten Verzeichnis nach Änderungsalter sortieren möchten (aktuellste zuerst):

ls -t

Um nach Zugriffszeit zu sortieren, fügen Sie die -uOption hinzu.

ls -tu

Beachten Sie jedoch, dassmoderne Linux-Systeme erfassen standardmäßig keine genauen ZugriffszeitenDaher sind die Zugriffszeitstempel möglicherweise nicht zuverlässig.

Wenn Sie die neueste Datei in einem Verzeichnisbaum (einschließlich Unterverzeichnissen) finden möchten, ist die bei weitem einfachste Methode die Verwendung von zshsGlob-Qualifikation.

print -lr -- **/*(om)

Verwenden Sie oaanstelle von om, um die Zugriffszeit statt der Änderungszeit zu verwenden. Sie können die Übereinstimmungen einschränken, um beispielsweise die 10 aktuellsten Dateien zu erhalten:

print -lr -- **/*(om[1,10])

Diese überspringen versteckte Dateien. Wenn Sie auch versteckte Dateien berücksichtigen möchten, fügen Sie den DGlob-Qualifizierer hinzu. Sie können den .Glob-Qualifizierer auch hinzufügen, um nurregulärDateien (ohne symbolische Links, Verzeichnisse, FIFOs usw.) und mm-60/oder mh-1zur Beschränkung auf Dateien, die innerhalb der letzten Stunde zuletzt geändert wurden.

Antwort3

Sie können den rekursiven Schalter ( -R) lszusammen mit dem Schalter zum Sortieren nach Zeit ( -t) und dem Schalter zum umgekehrten Sortieren ( -r) verwenden, um alle Dateien in einem Verzeichnisbaum aufzulisten. Dadurch werden nicht alle Dateien nach ihrem Zugriffs-/Änderungsdatum in den Unterverzeichnissen sortiert, sondern sie werden innerhalb jedes Unterverzeichnisses unabhängig nach diesem Datum sortiert.

Verwenden Sie einen Befehl wie diesen: ls -ltrR <sometopdir>.

Beispiel

$ ls -ltrR .
total 759720
-rw-r-----@  1 sammingolelli  staff    2514441 Mar 31  2015 restfulapi-120704053212-phpapp01.pdf
-rw-r-----@  1 sammingolelli  staff     567808 Apr  7  2015 USGCB-Windows-Settings.xls
-rw-r-----@  1 sammingolelli  staff     180736 Apr  7  2015 USGCB-RHEL5-Desktop-Settings-Version-1.2.5.0.xls
-rw-r-----@  1 sammingolelli  staff       6474 Apr  8  2015 tap_kp_mavericks.txt

./kerberos:
total 5464
-rw-r-----@ 1 sammingolelli  staff    37317 Oct  2 13:03 Set_up_Kerberos_instruction_d8.docx
-rw-r-----@ 1 sammingolelli  staff  2753195 Oct 13 13:49 Keberos configuration with AD 01_09_2014.pdf

./homestarrunner:
total 10624
-rw-rw-rw-@ 1 sammingolelli  staff   319422 May 10  2000 error_hs.wav
-rw-rw-rw-@ 1 sammingolelli  staff    53499 Jun  8  2001 sb_duck.mp3
-rw-rw-rw-@ 1 sammingolelli  staff   199254 Mar 11  2002 email_sb.wav
-rw-rw-rw-@ 1 sammingolelli  staff    39288 Mar 25  2002 bubs_dontutalk.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    75432 May  6  2002 trash_sb.wav
-rw-rw-rw-@ 1 sammingolelli  staff   298946 Dec  1  2002 error_sb.wav
-rw-rw-rw-@ 1 sammingolelli  staff   298686 Dec  1  2002 startup_hs.wav
-rw-rw-rw-@ 1 sammingolelli  staff    90279 Dec  1  2002 sb_meedlymee.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    73561 Dec  1  2002 sb_dubdeuce.mp3
-rw-rw-rw-@ 1 sammingolelli  staff   193097 Dec  1  2002 sb_pizza.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    30093 Dec  1  2002 sb_stiny.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    61858 Dec  1  2002 ss_sadflying.mp3
-rw-rw-rw-@ 1 sammingolelli  staff   150142 Dec  1  2002 email_hs.wav
-rw-rw-rw-@ 1 sammingolelli  staff    68545 Dec  1  2002 bubs_grabbinbutt.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    61022 Dec  1  2002 cz_jeorghb.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    40124 Dec  1  2002 marzy_nasty.mp3
-rw-rw-rw-@ 1 sammingolelli  staff   224116 Dec  1  2002 shutdown_sb.wav
-rw-rw-rw-@ 1 sammingolelli  staff   260546 Dec  1  2002 shutdown_hs.wav
-rw-rw-rw-@ 1 sammingolelli  staff    57686 Dec  1  2002 trash_hs.wav

Antwort4

Sie möchten den vollständigen Satz der „letzten“ Dateien nach Zugriffs-/Änderungszeit sortieren, unabhängig von ihrer Position im Dateibaum?

Eine Möglichkeit hierfür besteht darin, statfür jede Datei die Änderungszeit sortnach Ergebnis auszudrucken und anschließend cutdie Änderungszeit aus den Ergebnissen.

Dies funktioniert nicht bei Dateien, die Zeilenumbrüche im Namen enthalten. Für andere Dateien gibt es jedoch folgende Lösung, bei der die in den letzten 60 Minuten geänderten Dateien in der Reihenfolge von der aktuellsten bis zur ältesten Änderung aufgelistet werden:

find . -type f -mmin -60 -exec stat -c $'%Y\t%n' {} + | sort -nr | cut -f2-

verwandte Informationen