573 Stimmen

Rekursives Auffinden und Auflisten der zuletzt geänderten Dateien in einem Verzeichnis mit Unterverzeichnissen und Zeiten

  • Das Betriebssystem: Linux

  • Dateisystem-Typ: ext3

  • Bevorzugte Lösung: Bash (Skript/Einzeiler), Ruby oder Python

Ich habe mehrere Verzeichnisse mit mehreren Unterverzeichnissen und Dateien darin. Ich muss eine Liste all dieser Verzeichnisse erstellen, die so aufgebaut ist, dass jedes Verzeichnis der ersten Ebene neben dem Datum und der Uhrzeit der zuletzt erstellten/geänderten Datei darin aufgeführt ist.

Zur Verdeutlichung: Wenn ich eine Datei berühre oder ihren Inhalt ein paar Unterverzeichnisebenen tiefer ändere, sollte dieser Zeitstempel neben dem Namen des Verzeichnisses der ersten Ebene angezeigt werden. Angenommen, ich habe ein Verzeichnis, das wie folgt strukturiert ist:

./alfa/beta/gamma/example.txt

und ich ändere den Inhalt der Datei example.txt Ich brauche diese Zeit neben dem Verzeichnis der ersten Ebene angezeigt alfa in menschenlesbarer Form, nicht Epoche. Ich habe einige Dinge mit find ausprobiert, xargs , sort und dergleichen, aber ich komme nicht um das Problem herum, dass sich der Dateisystem-Zeitstempel von "alfa" nicht ändert, wenn ich Dateien ein paar Ebenen tiefer anlege/verändere.

0voto

Gerd Punkte 1633

Auf dem Mac verwende ich dies

find . -type f -exec stat -f "%m %N" "{}" \; | sort -nr | perl -n -e '@a = split / /;print `ls -l $a[1]`' | vim -

Wenn Sie einige Dateien filtern wollen, können Sie grep mit regexp verwenden, z. B.

find . -type f -exec stat -f "%m %N" "{}" \; | sort -nr | grep -v -E \.class$ | perl -n -e '@a = split / /;print `ls -l $a[1]`' | vim -

0voto

graugans Punkte 230

Sie können die printf ACTION von find ausprobieren

%Ak Letzte Zugriffszeit der Datei in dem durch k angegebenen Format, der entweder @' or a directive for the C strftime' Funktion. Die möglichen Werte für k sind unten aufgeführt; einige von ihnen sind möglicherweise nicht auf allen Systemen verfügbar sein, da aufgrund von Unterschieden in der `strftime' zwischen Systemen.

Die Einzelheiten finden Sie unter @anubhava's Antwort

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X