Wie finde ich die Datei heraus, auf die zuletzt in einem bestimmten Verzeichnis zugegriffen wurde?
Ich kann den find
Befehl verwenden, um alle Dateien aufzulisten, die in den letzten n
Minuten geändert wurden / auf die zugegriffen wurde . Aber hier in meinem Fall bin ich nicht sicher, wann die letzte Datei geändert wurde / zugegriffen wurde? Alles, was ich brauche, ist, alle Dateien, auf die kürzlich zugegriffen wurde, unter allen anderen Unterdateien oder Unterverzeichnissen aufzulisten, sortiert nach ihren Zugriffs- / Änderungszeiten.
Ist das möglich?
Antworten:
Sie können den rekursiven Schalter (
-R
)ls
zusammen mit dem Schalter zum Sortieren nach Zeit (-t
) und den Schalter zum umgekehrten Sortieren (-r
) verwenden, um alle Dateien in einem Verzeichnisbaum aufzulisten. Dadurch werden nicht alle Dateien nach ihren Zugriffs- / Änderungsdaten in Unterverzeichnissen sortiert, sondern nach diesem Datum in jedem Unterverzeichnis unabhängig sortiert.Mit einem Befehl wie diesem :
ls -ltrR <sometopdir>
.Beispiel
quelle
So drucken Sie die Dateien, auf die zuletzt zugegriffen wurde (sortiert von der Datei, auf die zuletzt zugegriffen wurde, bis zur Datei, auf die zuletzt zugegriffen wurde):
So drucken Sie die letzten 3 geänderten Dateien (sortiert von der zuletzt geänderten bis zur vorletzten geänderten Datei):
find . -type f -exec stat -c '%X %n' *
: Gibt die letzte Zugriffszeit aus, gefolgt vom Dateipfad für jede Datei in der aktuellen Verzeichnishierarchie.find . -type f -exec stat -c '%Y %n' *
: Gibt die Zeit der letzten Änderung aus, gefolgt vom Dateipfad für jede Datei in der aktuellen Verzeichnishierarchie.sort -nr
: sortiert in umgekehrter numerischer Reihenfolge;awk 'NR==1,NR==3 {print $2}'
: druckt das zweite Feld der ersten, zweiten und dritten Zeile.Sie können die Anzahl der anzuzeigenden Dateien ändern, indem Sie 3 auf die gewünschte Anzahl von Dateien in ändern
awk 'NR==1,NR==3 {print $2}'
.quelle
year
stat -f '%Dm %N'
.
direkt nach demfind
. Ich brauchte ein paar Minuten, um es zu verstehen.awk
und da ich nicht weiß, wie ich es verwenden soll, reicht es aus, einfach denawk
Befehl durch| head -n 3
(um die ersten drei Ergebnisse zu behalten) zu ersetzen . Wenn Sie die Zeitstempel immer noch entfernen möchten,| cut -d' ' -f2-
Dieser Befehl stellt auch die zuletzt geänderte Datei oder das zuletzt geänderte Verzeichnis aus dem aktuellen Verzeichnisbaum bereit:
Natürlich können Sie das letzte Argument in die Anzahl der zuletzt benötigten Dateien ändern.
quelle
Wenn Sie möchten, dass die Dateien in einem bestimmten Verzeichnis nach Änderungsalter sortiert sind (zuletzt zuerst):
Fügen Sie die
-u
Option hinzu, um nach Zugriffszeit zu sortieren .Beachten Sie jedoch, dass moderne Linux-Systeme standardmäßig nicht die genauen Zugriffszeiten erfassen . Daher sind die Zugriffszeitstempel möglicherweise nicht zuverlässig.
Wenn Sie die neueste Datei in einem Verzeichnisbaum einschließlich der Unterverzeichnisse suchen möchten, ist die mit Abstand einfachste Methode die Verwendung der Glob-Qualifizierer von zsh .
Verwenden Sie
oa
anstelle vonom
, um die Zugriffszeit anstelle der Änderungszeit zu verwenden. Sie können die Übereinstimmungen einschränken, um beispielsweise die 10 neuesten Dateien abzurufen:quelle
Sie möchten den gesamten Satz "aktueller" Dateien nach ihrer Zugriffs- / Änderungszeit sortieren, unabhängig von ihrem Speicherort im Dateibaum?
Eine Möglichkeit, dies zu tun, besteht darin
stat
, die Änderungszeit für jede Dateisort
anhand des Ergebnisses und danncut
die Änderungszeit aus den Ergebnissen zu drucken .Dies wird für Dateien unterbrochen, deren Namen Zeilenumbrüche enthalten. Für andere Dateien gibt es jedoch eine Lösung, mit der Dateien aufgelistet werden, die innerhalb der letzten 60 Minuten geändert wurden und von zuletzt bis zuletzt geändert wurden:
quelle
Lassen Sie uns dies in eine plattformübergreifende Bash-Funktion einfügen:
Verwendungszweck:
quelle
Ich habe das erwähnte "mrt" -Skript von Matt Kneiser für einige Untersuchungen verwendet. Dann wurden ab dem 11.12.2018 mehrere Dateien angezeigt. Bei weiteren Untersuchungen stellte ich fest, dass das angegebene Datum nicht das Änderungsdatum, sondern das Zugriffsdatum war. In Bezug auf das
stat
Handbuch ist die korrekte Formatzeichenfolge unter Linux nicht% X, sondern% Y für das Datum der letzten Änderung anstelle des letzten Zugriffsdatums. Hier die manuellen Einträge vom 17.03.2020 auf debian:Meiner Meinung nach sollte die korrekte Linux-Anweisung in Ihrem Skript folgendermaßen aussehen:
quelle