Wie kann ich in jedem Ordner eines Baumes rekursiv eine Hash-Datei (sha512sum) erstellen?

1444
Chris

Sagen Sie für einen bestimmten Baum / var / ftpd. Wie kann ich in jedem Ordner dieses Baums eine Hash-Datei mit dem Inhalt dieses Ordners innerhalb eines bestimmten Baums erstellen? sha1sum und sha512sum haben keine Rekursionsoptionen.

1

2 Antworten auf die Frage

1
Chris

FWIW die Lösung ist:

user @ host bin] $ cat mkshaindir  #! / bin / dash cd $ 1 sha512sum *> .sha512sum  [user @ host bin] $ find / var / ftpd -type d -print0 | xargs -0 -i mkshaindir {} 

Beachten Sie, dass mkshaindir für meine Zwecke eine separate Komponente ist, da ich möglicherweise einen Hash von Dateien in einem neuen Ordner oder in einem kürzlich geänderten Ordner erstellen muss.

Der Rest bleibt dem Leser als Übung.

Hinweis: sha512sum beschwert sich bei STDERR über die Eingabe von Dateien (z. B. Verzeichnisse, Blockdateien usw.).

+1, obwohl einige Details nett sein könnten. (zB die -print0 xargs-0, um 'interessante' Dateinamen zu umgehen. Der -typ d, um nur die Direktiven in find auszuwählen, ...) Hennes vor 8 Jahren 0
Hennes, with apologies to Dickens, are there no googles? Are there no man pages? Chris vor 8 Jahren 0
Yup . Also anoying betknowers who know it all. Still, simplest to the people reading this if we pad it just a tad more. Hennes vor 8 Jahren 0
Die Menschen besuchen diese Seite, um eine Lösung zu finden oder um sich inspirieren zu lassen. Diejenigen, die nach einer Lösung suchen, werden nicht mehr nachfragen, wie oder warum. Wer Inspiration sucht, wird wie ich die Manpages lesen und für sich selbst googeln. Ersteres interessiert sich nicht für eine Diskussion, und letzteres könnte es tun, würde sie aber nur lesen, wenn sie es nicht durch eigene Recherchen "verstehen" könnte. Chris vor 8 Jahren 0
0
user1016274

Das Skript sollte es vermeiden, die Hashdatei selbst in die Berechnung einzubeziehen, da das Speichern der Hashdatei den Hash ungültig macht.
Darüber hinaus schlage ich vor, find -execRessourcen zu sparen:

find /var/ftpd -type d -print0 ! -name .sha512sum -exec mkshaindir {} \; 
Ihre Aussage ist wahr, wenn \ * versteckte Dateien gefunden hat (aka dot-Dateien [zB .profile]). Es ist daher der Grund, eine Punktdatei zum Speichern der Hashwerte zu verwenden. Eine Hash-Datei wird nicht ungültig gemacht, da eine Zeile fehlschlägt. sha512sum -c hashfile meldet, dass bei einer einzelnen Datei ein Fehler aufgetreten ist und nicht, dass die gesamte Datei ungültig ist. Eine Person, die sich mit dem Prozess auskennt, würde verstehen, dass es sich um das Huhn / Ei-Problem handelt, und die einzige fehlerhafte Zeile in einer Datei ignorieren, die nicht anwendbar war. Chris vor 8 Jahren 0
Ich dachte an einen allgemeineren Fall, in dem Sie in einem Teilbaum nach geänderten Dateien suchen würden. Daher würde ich dot-files grundsätzlich nicht ausschließen, und zweitens würde ich den Teilbaum anhand eines Skripts und dessen Exit-Wert überprüfen (jede Datei wurde geändert - nicht eine einzelne Datei in der Teilstruktur). Also entweder ich filtere nach '.sha512sum', wenn ich die Prüfsumme erstellt oder die Prüfsummen-Dateien prüft. Aber für Ihren Anwendungsfall stimme ich zu, dass die Allgemeinheit nicht zählt. user1016274 vor 8 Jahren 0