Wie erstelle ich eine Liste der Dateiinhalte eines Verzeichnisses und von Unterverzeichnissen mit Erstellungs-, Hinzufügungs-, Änderungs- und letzten Öffnungszeitpunkten für jede Datei?

Wie erstelle ich eine Liste der Dateiinhalte eines Verzeichnisses und von Unterverzeichnissen mit Erstellungs-, Hinzufügungs-, Änderungs- und letzten Öffnungszeitpunkten für jede Datei?

Ich habe einen Mac und muss eine Liste aller Dateiinhalte in einem bestimmten Verzeichnis und seinen Unterverzeichnissen erstellen, zusammen mit den Daten „Erstellung“, „Hinzugefügt“, „Geändert“ und „Zuletzt geöffnet“ für jede Datei.

Beim Durchsehen der verschiedenen Threads kann ich erkennen, wie ich die Erstellungs-/Hinzufügungs-/Änderungsdaten mit den Befehlen „ls“ oder „stat“ abrufen kann. Allerdings sehe ich keine Möglichkeit, die Informationen zum Datum der letzten Öffnung für alle Dateien rekursiv abzurufen.

Antwort1

  • Schaffung: Obwohl dies keine der ursprünglichen Dateieigenschaften von UNIX ist, ist es heutzutage auf vielen Dateisystemen verfügbar (darunter insbesondere HFS+ für MacOS) und die modernen Versionen von Tools wie lsund statwissen, wie man darauf zugreift: ls -U, statverwendet B(in den Manpages dokumentiert).
  • Hinzugefügt: Das gibt es nicht per se. Sie können die letzte Änderungszeit des Verzeichnisses, das eine Datei enthält, verwenden, um zu erfahren, wann die letzte Änderung an diesem Verzeichnis stattgefunden hat, also entweder, dass eine Datei hinzugefügt (erstellt oder verschoben), entfernt (gelöscht oder verschoben) oder umbenannt wurde. Aber Sie wissen nicht, was von beidem der Fall war, und Sie erhalten nur Informationen über das letzte Ereignis.
  • GeändertUndLetzter Zugriff: Dies sind Originalstatistiken, die seit jeher für Dateien in UNIX verfügbar sind. Die meisten Dateisysteme und im Grunde alle Tools unterstützen sie: ls -u, statverwendet aund m(wiederum wie dokumentiert). Beachten Sie, dass die Verfolgung des letzten Zugriffszeitstempels manchmal oder bedingt deaktiviert ist, um bei jedem Dateizugriff Schreibvorgänge auf die Festplatte zu sparen.

Es gibt noch einen weiteren Punkt, den Sie nicht erwähnt haben, nämlichletzte Inode-Änderung. Dadurch wird verfolgt, wann sich die Metadaten einer Datei zuletzt geändert haben (im Gegensatz zum Dateiinhalt).

Antwort2

Du kannst den ... benutzenstatBefehl zum Auflisten von Informationen zu einer Datei. Mit diesem Befehl können Sie alle vier Zeitstempel auflisten, die das Betriebssystem für eine Datei aufzeichnet:

  • %a: die Zugriffszeit (atime). Dies ist der Zeitpunkt, zu dem die Datei zum letzten Mal geöffnet oder anderweitig gelesen wurde (z. B. um ihren Inhalt zu analysieren oder zu indizieren).
  • %m: die Änderungszeit (mtime). Dies ist der Zeitpunkt, zu dem der Inhalt der Datei zum letzten Mal geändert wurde. Wenn die Datei kopiert oder von woanders heruntergeladen wurde, hängt es davon ab, wie die Kopie erstellt wird, ob ihre mtime zum Zeitpunkt des Kopierens aktualisiert wird.
  • %c: die Inode-Änderungszeit (ctime). Diese Zeit wird immer dann aktualisiert, wenn mit der Datei etwas anderes passiert als sie zu lesen: Änderung, Umbenennen, Verschieben, Ändern von Berechtigungen usw.
  • %B: die Geburtszeit (Erstellungszeit). Dies ist normalerweise die Zeit, zu der die Datei erstellt oder heruntergeladen wurde. Bei einigen Anwendungen kann dies jedoch auch der Zeitpunkt sein, zu dem die Datei zuletzt gespeichert wurde.

Kombinieren Sie es mit demfindBefehl zum rekursiven Auflisten von Dateien. Um beispielsweise die Zeitstempel und Namen aller regulären Dateien im aktuellen Verzeichnis aufzulisten, können Sie Folgendes verwenden:

find . -type f -exec stat -f '%Sa %Sc %Sm %SB %N' {} \;

verwandte Informationen