Pagina 1 di 1
riconoscere in modo univoco un file
Inviato: dom 11 mar 2007, 19:24
da danix
Salve a tutti,
in questi giorni ho preso a controllare uno ad uno oltre 100 cd mp3 per conto di un amico, e ho notato che spesso delle canzoni si rincorrono su vari cd con nomi diversi, mi chiedevo, come fare per segnare univocamente un file in modo da scovare dei duplicati ed eliminarli; mi è venuto in mente di calcolare la somma md5 di ogni mp3 e di associarla al nome del file (magari utilizzando un database per rendere il tutto un pò più ordinato...), voi credete che sia fattibile praticamente?? si parla di oltre 80 GB di mp3...
Voi quale dbms utilizzereste?? Premetto che non sono pratico di database, ma mi basta che sia supportato da python (unico linguaggio che conosco un pochino) e per me va bene...
Spero che questo post non stoni troppo con il forum di slacky, ma siete la community italiana più "familiare" per me, e iniziare questa specie di sondaggio da voi mi è venuto quasi naturale, spero mi aiuterete...
Grazie mille
Inviato: dom 11 mar 2007, 19:56
da michele.p
...recentemente ho letto una recensione su un software che serve proprio a scovare i duplicati e, eventualmente, a cancellarli (naturalmente su hard disk)....ora però mi sfugge il nome....

Inviato: dom 11 mar 2007, 20:30
da danix
michele.p ha scritto:...recentemente ho letto una recensione su un software che serve proprio a scovare i duplicati e, eventualmente, a cancellarli (naturalmente su hard disk)....ora però mi sfugge il nome....

grazie della risposta, il fatto è che voglio provare a creare questo programma autonomamente, per questo ho chiesto un dbms compatibile con python...comunque mi sto dirigendo verso mysql (che tra l'altro è installato di default nella mia slack 11), qualcuno ha idea di dove si possa reperire un pò di documentazione in italiano??
grazie mille a tutti
Inviato: dom 11 mar 2007, 21:29
da alessiodf
JAVA + Postgress

Cosi ti fai anche una interfaccetta grafica swing!
Non dovrebbe essere complicato, anzi! Il fatto e' che l'md5 ha un suo tempo di calcolo computazionale.. La generazione del database, per ogni cd di 700Mb potrebbe durare circa 1 minuto per CD! potresti fare cosi:
1) per ogni file del cd, leggi nome file, calcoli md5
2) metti nel DATABASE nome + md5, se gia esiste un md5 uguale, lo segnali su interfaccia o su log..
3) lo farei multithread, cosi ad esempio per ogni CD, puoi calcolarti gli md5 di 2,3,4,5, ecc.. (pool di thread) in modo parallelo!
classico produttore consumatore.. io farei un thread che legge i files, e li mette in una queue (java.util.concurrent) e N consumatori che calcolano MD5 + insert nel database..
quasi quasi lo faccio io per gioco!

Inviato: dom 11 mar 2007, 22:25
da danix
alessiodf ha scritto:JAVA + Postgress

Cosi ti fai anche una interfaccetta grafica swing!
Non dovrebbe essere complicato, anzi! Il fatto e' che l'md5 ha un suo tempo di calcolo computazionale.. La generazione del database, per ogni cd di 700Mb potrebbe durare circa 1 minuto per CD! potresti fare cosi:
1) per ogni file del cd, leggi nome file, calcoli md5
2) metti nel DATABASE nome + md5, se gia esiste un md5 uguale, lo segnali su interfaccia o su log..
3) lo farei multithread, cosi ad esempio per ogni CD, puoi calcolarti gli md5 di 2,3,4,5, ecc.. (pool di thread) in modo parallelo!
classico produttore consumatore.. io farei un thread che legge i files, e li mette in una queue (java.util.concurrent) e N consumatori che calcolano MD5 + insert nel database..
quasi quasi lo faccio io per gioco!

Il problema è che non conosco java... dovrei mettermi a studiare sia il linguaggio di programmazione che postgresql, mentre usando il python qualche base già ce l'ho... mi sono indirizzato su mysql solo indicativamente, infatti al momento sto solo girovagando sul sito per capirne un pò di più...
grazie mille per la risposta...
Inviato: lun 12 mar 2007, 0:21
da masalapianta
for i in `find directory/ -type f`; do md5sum $i;done|awk '{print "insert into tabella (hash,file) values ('\''"$1"'\'','\''"$2"'\'');"}'|mysql nomedb
(ovviamente i file non devono contenere spazi nel nome, ma su *nix questo dovrebbe essere normale)
Inviato: lun 12 mar 2007, 9:43
da alessiodf
masalapianta ha scritto:for i in `find directory/ -type f`; do md5sum $i;done|awk '{print "insert into tabella (hash,file) values ('\''"$1"'\'','\''"$2"'\'');"}'|mysql nomedb
(ovviamente i file non devono contenere spazi nel nome, ma su *nix questo dovrebbe essere normale)
aggira le variabili con "$x" cosi puoi avere anche spazi ecc...
Codice: Seleziona tutto
for i in `find directory/ -type f`; do
md5sum "$i";done | awk '{print "insert into tabella (hash,file) values ('\''"$1"'\'','\''"$2"'\'');"}' | mysql nomedb