[Python] Proof of concept per un programma di scansione duplicati.

Nicola Larosa nico a tekNico.net
Mer 19 Giu 2013 11:49:21 CEST


Gollum1 wrote:
> Ora mi ritrovo con una marea di file duplicati, a volte anche con
> nomi diversi... ho provato diversi programmi che dovrebbero trovare
> tutti i duplicati, ma per un verso o per l'altro non mi hanno mai
> soddisfatto.

Quali programmi hai provato?

Nei repo Ubuntu trovo:

- FSlint <http://www.pixelbeat.org/fslint/> (GUI)
- Duff <http://duff.sourceforge.net/> (linea di comando)
- fdupes <http://code.google.com/p/fdupes/> (linea di comando)
- Rdfind <http://rdfind.pauldreik.se/> (linea di comando)


> Visto che si tratta di un file server, quindi senza interfaccia,
> pensavo ad un qualcosa diviso in due parti... il motore vero e proprio
> e un'interfaccia web che permetta di esaminare il risultato 
> dell'elaborazione, che per il modello di scansione e per la quantità
> di materiale potrebbe metterci anche qualche giorno.

Un bel lavorone. :-)


> La struttura dati che ho pensato è relativamente banale, un dizionario
> in cui si usa una tupla come chiave e una lista come dato. La tupla
> conterrà i seguenti dati:
> 
> - la dimensione del file (banale stat)
> - il tipo di file (il responso del comando file, o il corrispettivo 
>   python se esiste)
> - il calcolo md5sum del file (questa è sicuramente la parte più
>   onerosa in termini di tempo di calcolo)
> 
> Mentre la lista di dati è molto semplicemente l' elenco dei file che 
> condividono gli elementi usati per generare la chiave.

Vuoi memorizzare i dati di tutti i file, o solo di quelli che risultano
duplicati? Spero ti basti la seconda. :-)


> Ora... se per la parte di scansione e generazione del dizionario,
> credo di non avere problemi,

Sarebbe utile riusare uno dei comandi elencati prima, invece di
riscriverti tutto. Se invece ci tieni proprio, :-) magari puoi dare un
occhio al codice di deduplicazione di Obnam
<http://liw.fi/obnam/ondisk/#index12h2>.


> per la gestione del DB e della parte web non saprei proprio da che
> parte girarmi... per la gestione come deamon ci si può pensare
> successivamente.
> 
> Per il DB, mi avete distrutto il mito di maisequel, cosa mi
> consigliate? Postgres o SQLite?

Al solito, SQLite va bene se non hai accessi concorrenti. Nel database
memorizzerei solo i file duplicati: per il lavoro di rilevare le
duplicazioni hai bisogno di strutture dati in-memory, un db relazionale
ti rallenterebbe troppo. Ma di nuovo, ci sono vari programmi che già
fanno il lavoro sporco, meglio se usi uno di quelli. :-)


> Per la gestione del web? Implementare qualcosa con django?

Sì, aiutato da una buona libreria client-side con widget di tabelle a
colonne riordinabili.

-- 
Nicola Larosa - http://www.tekNico.net/

Settled people are something of an aberration. We are animals,
and yet so many of us insist on behaving like vegetables,
putting down roots when we are meant to roam free.
 - Dmitry Orlov, October 2012


Maggiori informazioni sulla lista Python