it-swarm.com.de

Wie liste ich kürzlich gelöschte Dateien aus einem Verzeichnis auf?

Ich bin mir nicht einmal sicher, ob dies einfach möglich ist, aber ich möchte die Dateien, die kürzlich aus einem Verzeichnis gelöscht wurden, nach Möglichkeit rekursiv auflisten.

Ich bin auf der Suche nach einer Lösung, bei der keine temporäre Datei erstellt werden muss, die eine Momentaufnahme der ursprünglichen Verzeichnisstruktur enthält, mit der verglichen werden soll, da der Schreibzugriff möglicherweise nicht immer verfügbar ist. Bearbeiten: Wenn es möglich ist, dasselbe Ergebnis durch Speichern des Schnappschusses in einer Shell-Variablen anstelle einer Datei zu erzielen, würde das mein Problem lösen.

So etwas wie:

find /some/directory -type f -mmin -10 -deletedFilesOnly

Edit: OS: Ich verwende Ubuntu 14.04 LTS, aber die Befehle würden höchstwahrscheinlich in einer Vielzahl von Linux-Boxen oder Docker-Containern ausgeführt, von denen die meisten oder alle ext4 verwenden sollten und für welche Ich hätte höchstwahrscheinlich keinen Zugriff auf Änderungen.

6
Marco Roy

Sie können das Dienstprogramm debugfs verwenden.

debugfs ist ein einfach zu verwendendes RAM-basiertes Dateisystem, das speziell für Debugging-Zwecke entwickelt wurde

Führen Sie zuerst debugfs /dev/hda13 in Ihrem Terminal aus (ersetzen Sie /dev/hda13 durch Ihre eigene Festplatte/Partition).

(HINWEIS: Sie können den Namen Ihrer Festplatte finden, indem Sie df / im Terminal ausführen).

Im Debug-Modus können Sie mit dem Befehl lsdel Inodes auflisten, die den gelöschten Dateien entsprechen.

Wenn Dateien in Linux entfernt werden, werden sie nur nicht verknüpft, aber ihre Inodes (Adressen auf der Festplatte, auf denen sich die Datei tatsächlich befindet) Werden nicht entfernt

Zum Abrufen von Pfaden dieser gelöschten Dateien können Sie debugfs -R "ncheck 320236" verwenden, indem Sie die Nummer durch Ihren speziellen Inode ersetzen.

Inode   Pathname
320236  /path/to/file

Von hier aus können Sie auch den Inhalt der gelöschten Dateien mit cat überprüfen. (HINWEIS: Sie können von hier aus auch wiederherstellen, falls erforderlich).

Toller Beitrag zu diesem hier .

6
nextstep

Vielen Dank für Ihre Kommentare und Antworten. debugfs scheint eine interessante Lösung für die ursprünglichen Anforderungen zu sein, ist aber für die einfache und leichte Lösung, nach der ich gesucht habe, ein wenig übertrieben; Wenn ich das richtig verstehe, muss der Kernel mit debugfs-Unterstützung erstellt werden, und das Zielverzeichnis muss sich in einer debugfs-Mount befinden. Leider funktioniert das für meinen Anwendungsfall nicht wirklich. Ich muss in der Lage sein, eine Lösung für vorhandene, "grundlegende" Kernel und Verzeichnisse bereitzustellen.

Da dies praktisch unmöglich scheint, konnte ich die Anforderungen aushandeln und lockern, bis die Quantity der Dateien aufgeführt sind, die kürzlich aus einem Verzeichnis gelöscht wurden, wenn möglich rekursiv.

Dies ist die Lösung, die ich am Ende umgesetzt habe:

  1. Ein einfacher find-Befehl wurde an wc weitergeleitet, um die ursprüngliche Anzahl der Dateien im Zielverzeichnis (rekursiv) zu zählen. Das Ergebnis kann dann problemlos in einer Shell- oder Skriptvariablen gespeichert werden, ohne dass ein Schreibzugriff auf das Dateisystem erforderlich ist.

DEL_SCAN_ORIG_AMOUNT=$(find /some/directory -type f | wc -l)

  1. Wir können dann denselben Befehl später erneut ausführen, um die aktualisierte Anzahl der Dateien zu erhalten.

DEL_SCAN_NEW_AMOUNT=$(find /some/directory -type f | wc -l)

  1. Dann können wir die Differenz zwischen den beiden in einer anderen Variablen speichern und den ursprünglichen Betrag aktualisieren.

DEL_SCAN_DEL_AMOUNT=$(($DEL_SCAN_ORIG_AMOUNT - $DEL_SCAN_NEW_AMOUNT));DEL_SCAN_ORIG_AMOUNT=$DEL_SCAN_NEW_AMOUNT

  1. Wir können dann eine einfache Nachricht drucken, wenn die Anzahl der Dateien gesunken ist.

if [ $DEL_SCAN_DEL_AMOUNT -gt 0 ]; then echo "$DEL_SCAN_DEL_AMOUNT deleted files"; fi;

  1. Kehren Sie zu Schritt 2 zurück.

Leider meldet diese Lösung nichts, wenn in einem Intervall die gleiche Anzahl von Dateien erstellt und gelöscht wurde. Dies ist jedoch kein Problem mit huge für meinen Anwendungsfall.

Um dies zu umgehen, muss ich die tatsächliche Liste der Dateien anstelle der Anzahl speichern, aber ich konnte diese Funktion nicht mithilfe von Shell-Variablen ausführen. Wenn jemand das herausfinden könnte, würde ich mir ungemein helfen, da es die ursprünglichen Anforderungen erfüllen würde!

Ich würde auch gerne wissen, ob jemand Kommentare zu den beiden Ansätzen hat.

0
Marco Roy