Vorgehensweise zum berechnen der md5-Prüfsumme Verzeichnis mit java-oder groovy?
Ich bin auf der Suche nach java oder groovy, um die md5-Prüfsumme des kompletten Verzeichnis.
Habe ich zum kopieren von Verzeichnissen für Quelle, Ziel, Prüfsumme Quell-und Ziel -, und nach der Quelle löschen Verzeichnisse.
Finde ich dieses Skript für die Dateien, aber wie es zu tun die gleiche Sache mit Verzeichnissen ?
import java.security.MessageDigest
def generateMD5(final file) {
MessageDigest digest = MessageDigest.getInstance("MD5")
file.withInputStream(){ is ->
byte[] buffer = new byte[8192]
int read = 0
while( (read = is.read(buffer)) > 0) {
digest.update(buffer, 0, read);
}
}
byte[] md5sum = digest.digest()
BigInteger bigInt = new BigInteger(1, md5sum)
return bigInt.toString(16).padLeft(32, '0')
}
Gibt es einen besseren Ansatz ?
Sollten Sie mit einer der
Ich finde FastMD5, wirklich einfach zu finden, Datei MD5 : String hash = MD5.asHex(MD5.getHash(new File(filename))); einfach zu bedienen und Schneller.
org.apache.commons.codec.digest.DigestUtils.md5Hex
Methoden den Vorzug zu geben Sie den code obenIch finde FastMD5, wirklich einfach zu finden, Datei MD5 : String hash = MD5.asHex(MD5.getHash(new File(filename))); einfach zu bedienen und Schneller.
InformationsquelleAutor Fabien Barbier | 2010-06-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte die gleiche Anforderung und wählte meine 'Verzeichnis hash" ist ein MD5-Hashwert der verketteten Ströme von allen (nicht -) Verzeichnis Dateien innerhalb des Verzeichnisses. Als crozin erwähnt in den Kommentaren auf eine ähnliche Frage, die Sie verwenden können
SequenceInputStream
als stream Verkettung einer Belastung von anderen streams. Ich bin mit Apache-Commons-Codec für den MD5-Algorithmus.Grundsätzlich recurse durch den Verzeichnis-Baum, hinzufügen
FileInputStream
Instanzen zu einerVector
für nicht-Verzeichnis-Dateien.Vector
dann praktischerweise hat dieelements()
Methode um dieEnumeration
dassSequenceInputStream
braucht, um eine Schleife durch. Der MD5-Algorithmus verwendet wird, erscheint nur als eineInputStream
.Eine gotcha ist, dass Sie brauchen die Dateien dargestellt, die in der gleichen Reihenfolge jedes mal, wenn der hash der gleiche mit den gleichen Eingaben. Die
listFiles()
Methode inFile
keine Garantie für eine Bestellung, damit ich Sortieren nach dem Dateinamen.Ich damit beschäftigt war, für die SVN-Dateien gesteuert, und wollte vermeiden, hashing die versteckten SVN-Dateien, so das ich umgesetzt habe eine fahne zu vermeiden, versteckte Dateien.
Den einschlägigen grundlegenden code ist als unten. (Natürlich könnte es werden "gehärtet".)
Ja, guter Punkt re die nicht-Portabilität und froh, Sie fand das snippet nützlich. Das bit war die quick-and-dirty-code; ich wollte sagen "Natürlich könnte es werden "gehärtet"" : -)
Die Antwort ist genial, aber es findet wenn die Dateinamen geändert werden, behalten alphabetischer Reihenfolge, so können wir eine weitere hash mit dem absoluten Pfad der Datei.
InformationsquelleAutor Stuart Rossiter
Ich habe eine Funktion zum berechnen der MD5-Prüfsumme Verzeichnis :
Erste, ich bin mit FastMD5: http://www.twmacinta.com/myjava/fast_md5.php
Hier ist mein code :
Das ist eigentlich der Vermischung die hashes der Inhalt der Dateien, anstatt nur den Hash der Inhalte.
InformationsquelleAutor Fabien Barbier
HashCopy ist eine Java-Anwendung. Sie können erstellen und überprüfen von MD5-und SHA auf eine einzelne Datei oder ein Verzeichnis rekursiv. Ich bin nicht sicher, ob es eine API. Es kann heruntergeladen werden von http://www.jdxsoftware.org.
InformationsquelleAutor William Leng
Basierend auf Stuart Rossiter's beantworten, aber sauberen code und versteckte Dateien richtig bearbeitet:
InformationsquelleAutor BullyWiiPlaza
Es ist nicht klar, was es bedeutet, dass die md5sum von einem Verzeichnis. Möchten Sie vielleicht die Prüfsumme der Datei mit der Auflistung; vielleicht möchten Sie die Prüfsumme der Datei-Inserate und deren Inhalte. Wenn Sie bereits Fazit die Daten der Datei selbst, würde ich vorschlagen, dass Sie spec eine eindeutige Darstellung für ein Verzeichnis-listing (watch out für das böse Zeichen in Dateinamen), dann berechnen und Hashwert, jedes mal. Sie müssen auch überlegen, wie Sie behandeln spezielle Dateien (sockets, pipes, devices und symlinks im unix-Welt; NTFS-Datei-streams und ich glaube, so etwas wie symlinks).
InformationsquelleAutor crazyscot