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)
příbuzné články:
Historie REPLu
Conway's game of life
Scrabble
Content-aware image cropping with Scala
StripBot
Spellcheck
sem odkazují:
Je třeba vykydat chlív #4