Detekce duplicitních souborů
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 same size
.flatMap { fs => // we must go deeper!
(fs // Seq[File]
.groupBy(makeHash _) // 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)




Jmenuji se Karel Čížex, v síti také známý jako 
komentáře