Wie finde ich die zuletzt aufgerufene Datei in einem bestimmten Verzeichnis heraus?
Mit dem Befehl kann ich find
alle Dateien auflisten, die in den letzten n
Minuten 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 stat
Befehle ä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 -u
Option 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 oa
anstelle 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 D
Glob-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-1
zur Beschränkung auf Dateien, die innerhalb der letzten Stunde zuletzt geändert wurden.
Antwort3
Sie können den rekursiven Schalter ( -R
) ls
zusammen 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, stat
für jede Datei die Änderungszeit sort
nach Ergebnis auszudrucken und anschließend cut
die Ä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-