Hash-Datei beim erneuten Prüfen von Dateien aktualisieren

Hash-Datei beim erneuten Prüfen von Dateien aktualisieren

Ich speichere derzeit jeden Ordner in einer Hash-Datei mit dem folgenden Code

find folder/ -type f -exec sha256sum {} > checksumfolder.txt \;

Ich frage mich, ob es möglich ist, statt die TXT-Datei zu prüfen/neu zu berechnen und neu zu erstellen, einfach die alte TXT-Datei zu aktualisieren und die neu hinzugefügten Dateien hinzuzufügen, die keinen Hash haben?

Antwort1

Erstellen Sie eine Makefilemit folgendem Inhalt:

SHAS := $(patsubst folder/%, sha/%, $(shell find folder/ -type f))

all: sha $(SHAS) checksumfolder.txt

sha:
    mkdir sha

sha/%: folder/%
    sha256sum $< > $@

checksumfolder.txt: $(SHAS)
    cat $(SHAS) > checksumfolder.txt

Wenn Sie jetzt makeim übergeordneten Verzeichnis von ausführen, wird folder/ein neues Verzeichnis erstellt, das die SHA256-Summe aller Dateien in enthält . Am Ende verketten wir alle Dateien in .sha/folder/checksumfolder.txt

Beim makezweiten Ausführen geschieht nichts.

Wenn Sie eine Datei bearbeiten folder/oder eine neue erstellen und ausführen, makewird die SHA256-Summe dieser bestimmten Datei aktualisiert.

Um mehr über makerun zu erfahren info make.


Wenn Sie eine Datei nie ändern (nur neue hinzufügen), können Sie sich einfach den Dateinamen mit der aktuellsten Änderungszeit beim letzten Ausführen des findBefehls merken und nur die neueren Dateien mit folgendem Befehl auswählen:

find -newer REFERENCE_FILE

… oder ein direkter Zeitstempel (siehe date(1) DATE STRING) mit

find -newermt TIME_STAMP

verwandte Informationen