Wenn sich in einem Verzeichnis viele doppelte Dateien befinden, lassen Sie nur eine und löschen Sie die doppelten.
Der Vergleich der gesamten Datei ist schwierig, da die Verarbeitungskosten hoch sind.
Daher haben wir uns dieses Mal entschlossen, die Hashes (Digests) der Dateien zu vergleichen und sie mit der folgenden Richtlinie zu implementieren.
add
to Set
wenn es nicht existiertDas Beispiel, das vorerst funktioniert, ist wie folgt.
import java.io.File
import java.security.MessageDigest
val sha256 : MessageDigest = MessageDigest.getInstance("SHA-256")
fun getDigest(bytes: ByteArray): List<Byte> = sha256.digest(bytes).asList()
fun getFiles(pathToDir: String): List<File> = File(pathToDir).listFiles()?.asList() ?: emptyList()
fun main() {
val files = getFiles(/*Pfad des zu verarbeitenden Verzeichnisses*/)
val set = HashSet<List<Byte>>()
var count = 0
files.forEach {
val digest = getDigest(it.readBytes())
if (!set.add(digest)) {
if (it.delete()) {
println("Deleted:\t${it.name}")
count++
} else {
println("Fail delete:\t${it.name}")
}
}
}
println("\n\n$count deleted.")
}
Deleted: 43_3 Exemplare.gif
Deleted: 46_Kopie von 3 2.gif
Deleted: 70_Kopie von 1 2.gif
Deleted: 94_1 Kopie.gif
Deleted: 50_Kopie von 3 2.gif
Deleted: 66_1 Kopie.gif
Deleted: 95_1 Kopie.jpg
Deleted: 58_3 Exemplare.gif
Deleted: 63_1 Kopie.gif
Deleted: 32_1 Kopie.jpg
Deleted: 55_3 Exemplare.gif
Deleted: 62_3 Exemplare.gif
Deleted: 49_3 Exemplare.gif
Deleted: 9_Kopie von 1 2.gif
Deleted: 47_3 Exemplare.gif
Deleted: 96_1 Kopie.jpg
Deleted: 71_1 Kopie.gif
Deleted: 52_Kopie von 3 2.gif
Deleted: 64_Kopie von 1 2.gif
Deleted: 61_3 Exemplare.gif
Deleted: 56_3 Exemplare.gif
Deleted: 60_Kopie von 3 2.gif
Deleted: 31_1 Kopie.jpg
Deleted: 57_Kopie von 3 2.gif
Deleted: 98_Kopie von 1 2.jpg
Deleted: 34_1 Kopie.jpg
Deleted: 68_1 Kopie.gif
Deleted: 53_3 Exemplare.gif
Deleted: 42_3 Exemplare.gif
Deleted: 74_Kopie von 1 2.gif
Deleted: 30_1 Kopie.gif
Deleted: 36_Kopie von 1 2.gif
Deleted: 65_1 Kopie.gif
Deleted: 100_1 Kopie.jpg
Deleted: 37_1 Kopie.gif
Deleted: 35_Kopie von 1 2.gif
Deleted: 45_3 Exemplare.gif
Deleted: 99_1 Kopie.jpg
Deleted: 87_Kopie von 1 2.jpg
Deleted: 33_1 Kopie.jpg
Deleted: 73_1 Kopie.gif
Deleted: 1_7 Exemplare.jpg
Deleted: 48_3 Exemplare.gif
Deleted: 54_Kopie von 3 2.gif
Deleted: 51_3 Exemplare.gif
Deleted: 67_1 Kopie.gif
Deleted: 93_Kopie von 1 2.gif
Deleted: 44_Kopie von 3 2.gif
Deleted: 72_Kopie von 1 2.gif
Deleted: 97_Kopie von 1 2.jpg
50 deleted.
Ich habe java.security.MessageDigest
verwendet.
Dies kann als Java-Standard verwendet werden, ohne dass Bibliotheken eingeführt werden müssen.
Dieses Mal habe ich "SHA-256" für den Text angegeben, aber wenn Sie sagen "Ich möchte Doppelungen bis zum Limit vermeiden!", Sollten Sie "SHA-512" angeben.
Wahrscheinlich das am einfachsten und billigsten zu verwendende "HashSet". Da in "ByteArray" Bedenken hinsichtlich "gleich" bestehen, wird es hier in "Liste" konvertiert.
Recommended Posts