Detekce duplicitních souborů
<time datetime=2011-08-01T01:36:17>1. 8. 2011</time> — k47 (CC by)

Jednoduchý Scala skript, který detekuje a vypíše duplicitní soubory. Hodí se pro promazávání galerií obrázků stažených z 4chanu.
UPDATE (podstatně rychlejší verze, protože napřed porovnává velikosti souborů a pak teprve vypočítá hashe)
import java.io import java.security.MessageDigest import java.nio.channels.FileChannel.MapMode._ def makeHash(file: io.File) = { val md = MessageDigest.getInstance("MD5") val stream = new io.FileInputStream(file) val buffer = stream.getChannel.map(READ_ONLY, 0, file.length) md.update(buffer) val md5 = BigInt(md.digest()) stream.close() md5 } val files = (new io.File(".").listFiles .filter(_.isFile) .groupBy(_.length) // Map[Long, Seq[File]] .valuesIterator // Seq[Seq[File]] .filter(_.size > 1) // multiple files with the same size .flatMap { fs => fs // Seq[File] .groupBy(f => makeHash(f)) // Map[BigInt, Seq[FileHash]] .values // Seq[Seq[File]] .filter(_.size > 1) // has duplicates .map(_.tail) // only duplicates } ) for (f <- files.flatten) println(f)
U každé duplicity (truplicity, kvadruplicity atd.) jsou vypsány všechny soubory kromě jednoho. Takže všechny vypsané soubory můžeme bezpečně smazat:
rm $(scala -savecompiled dupl.scala)