přihlásit se
k47.cz
V případě náhodného požití vyvolejte zvracení

Detekce duplicitních souborů

autor: kaja47 - CC by - publikováno: - sekce obsah » programování » skripty #2324
štítky: a

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)

(první verze)


komentáře RSS

Zatím žádné komentáře. Buďte první.
Komentář bude formátován pomocí Texy! syntaxe.
Např: **tučný text**, *kurzíva*, "text odkazu":adresa.
Na ostatní komentáře můžete odkazovat pomocí [čísla komentáře].

Napište komentář!

 

o autorovi:

K. Jmenuji se Karel Čížex, v síti také známý jako kaja47 - tak trochu spisovatel, trochu programátor, trochu webař, milovník divné hudby atd atd.
mail:
jabber: kaja47@jabbim.cz

další projekty

wyhledawacz fel.log stalkr vtipy.k47.cz k47.shop Zkracovač adres stripbot

živě z twitteru

@spazef0rze V PHP se to dá oháčkovat nějak takto: https://t.co/jyJMPONMov
@spazef0rze T_STRING je posloupnost znaků, T_CONSTANT_ENCAPSED_STRING je string literál. Potud je to konzistentní.
@spazef0rze Stejně tak nemůže mít jméno class, and, function nebo jakékoli jiné klíčové slovo. Divný je hlavně, že $a-&gt;list() je validní.
Právě jsem místo "else" napsal "sele". Měl bych se jít najíst.

tadá

poslední články

Kdo nečte s námi, čte proti nám
článek | 30. dubna 2013
Oldboy
film | 13. dubna 2013
Jon Richardson vs. Sean Lock
článek | 4. dubna 2013
Zvuky!
článek | 29. března 2013
Co všechno neexistovalo, když jsem začínal s k47čkou
interní článek | 25. března 2013
Kdyby se někdo ptal, zapírej
| 17. března 2013
Horečka #4
povídka | 17. března 2013
Horečka #3
povídka | 17. března 2013
Horečka #2
povídka | 17. března 2013

poslední komentáře

Přeprava cestujících v Simutrans
Šimon-Erich Jelínek | 19. května 2013
Přeprava cestujících v Simutrans
Šimon-Erich Jelínek | 19. května 2013
Horečka #1
adam | 9. května 2013
Futurama
Saja | 21. března 2013
Skupinová samomluva 4
kaja47 | 16. března 2013

největší kecalové

Lisured Lisured
Daniel Daniel

K47i © 2002 - 2013 K. aka Kaja47