Home > GNU/Linux > Come ti trovo i files duplicati :)

Come ti trovo i files duplicati :)

Spesso capita di copiare files da una cartella ad un’altra e dimenticarsi poi di cancellarli, oppure non sapere di aver già quel documento salvato su di un’altra cartella…. ed intanto il disco si riempie…. ecco come faccio io ;)

Utilizzo questo script:

#! /bin/bash

LSTFILE=$(tempfile)
WRKFILE=$(tempfile)
DUPFILE=$(tempfile)

if [ -z "${#}" ]
then
        D="."
else
        D="${1}"
fi

echo "Ricerca in corso su ${D} ..."
find "$D" -type f -exec md5sum {} ; > $LSTFILE 2>/dev/null

echo "Analisi files..."
while read SUM FILE
do
        #echo "Analisi $FILE in corso... [${SUM}]"
        if grep "^${SUM} " $WRKFILE >/dev/null 2>&1
        then
                DUPLICATO=$(grep "^${SUM} " $WRKFILE | cut -d " " -f 2-)
                TIPO=$(file "${FILE}"|cut -d ":" -f 2-)
                echo "Errore $FILE uguale a $DUPLICATO (${TIPO} )"
                echo "${FILE} ${DUPLICATO} ${SUM} (${TIPO} )" >> $DUPFILE
        else
                echo "${SUM} \"${FILE}\"" >> $WRKFILE
        fi
done < $LSTFILE

rm -f $LSTFILE $WRKFILE 2>/dev/null
if [ -s $DUPFILE ]
then
        echo "File con i duplicati: $DUPFILE"
else
        rm -f $DUPFILE
fi
echo "Terminato."


basta lanciarlo specificando la cartella da dove iniziare le ricerche, ad esempio:
./filesDuplicati.sh /media/sda1/Multimedia/Foto/
per cercare i files duplicati contenuti nel mio HD USB esterno… ottenendo un output come questo:
Ricerca in corso su /media/sda1/Multimedia/Foto/ ...
Analisi files...
Errore /media/sda1/Multimedia/Foto/test/pippo.jpg uguale a '/media/sda1/Multimedia/Foto/test2/P1010244.JPG' ( JPEG image data, EXIF standard 2.2 )
Errore /media/sda1/Multimedia/Foto/test/pippo paperio.jpg uguale a '/media/sda1/Multimedia/test2/Enrico/P1010244.JPG' ( JPEG image data, EXIF standard 2.2 )
File con i duplicati: /tmp/filepIPI5p
Terminato.

Buona ricarca! ;)

Categories: GNU/Linux Tag:,
  1. 28 Luglio 2007 alle 1:45 | #1

    Ciao,

    ben fatto, veramente uno script che mi serviva.

    Grazie.

    A presto,

    paolettopn

  2. 31 Luglio 2007 alle 20:33 | #2

    Semplice e utile come script.. potresti fare una bella interfaccia grafica :-)

  3. Marco
    30 Agosto 2007 alle 8:15 | #3

    Ciao, complimenti per questo script che ho trovato veramente utile. Con la modifica che ti riporto sono riuscito a cercare file duplicati anche all’interno di directory aventi un nome contenente spazi, es. ./filesDuplicati.sh /media/disk/Foto Mare 2007/

    14. find "$D" -type f -exec md5sum \{} \;

    Grazie, a presto!
    Marco

  4. 30 Agosto 2007 alle 9:41 | #4

    Ottimo! ;)

  5. domi84
    6 Settembre 2007 alle 19:17 | #5

    Molto interessante…
    Però, per noi comuni mortali che non capiamo quello che c’è scritto lì tutto colorato, XD ci puoi dare una breve spiegazione di ciò che fa questo script…
    Trova due file uguali in base a cosa? Solo il nome? Nome e dimensione? Nome, dimensione e data di creazione? E elimina direttamente l’altro? O lo mette in una cartella a parte?

  6. 7 Settembre 2007 alle 6:32 | #6

    Per ogni file presente nella cartella corrente, o specificata come parametro di avvio, ne calcola la stringa md5 (usando md5sum) che identifica un file in maniera univoca, quindi controlla le stringhe md5 rilevate e se ne trova due uguali i due file relativi sono uguali ;)

  7. domi84
    7 Settembre 2007 alle 8:39 | #7

    Grazie!!!Gentilissimo!!!Anch’io credo che dovresti lavorare ad una interfaccia grafica!!!
    CIAO!!!

  8. domi84
    7 Settembre 2007 alle 8:41 | #8

    Scusa, un’altra cosa…
    Quando ha trovato due file uguali, cosa fa?Ne cancella uno?Lo sposta in una cartella a parte?Niente? XD

  9. 7 Settembre 2007 alle 9:30 | #9

    Niente, ti dice quali sono indicandoti un file contenente la lista di quelli duplicati (magari la lista è lunga e sarebbe difficile leggere l’output a terminale per vedere quali sono) ;)

  10. domi84
    14 Settembre 2007 alle 10:28 | #10

    Finalmente ho provato lo script…
    OTTIMO!!!
    Ha trovato più di 4000 doppioni… :-O …
    Fossi in te comincerei un progetto…Sarebbe molto utile avere una GUI, e avere più opzioni…tipo cancellare direttamente i file…
    CIAO!!!

  11. 14 Settembre 2007 alle 21:28 | #11

    Grazie! :D
    Per la GUI….. ok, ci farò un pensierino ;)

  12. beppe
    19 Settembre 2007 alle 11:08 | #12

    ti chiedo scusa, ma mi sposto sul mio problema, nella speranza che tu mi sappia proporre una soluzione. voglio salvare i lavori in un 2o hd e ho in mente di travasare i dati una volta alla settimana, perchè lascio il 2o hd sempre spento e lo accendo solo al bisogno (no virus, no usura…).
    come posso ordinare al pc “copia i soli files dalla tal data in poi” ??

    grazie per avermi letto, grazie se vorrai rispondermi, grazieeee se avrai una risposta propositiva, ultragrazie se mi risponderai al mio indirizzo email.

    grazie. cordialmente. beppe monco

  13. 19 Settembre 2007 alle 13:08 | #13

    @beppe
    Vedi se questo http://paper0k.wordpress.com/2006/12/05/come-cercare-i-nuovi-files/ può aiutarti, eventualmente lo puoi adattare alle tue esigenze ;)

  14. Gio
    28 Ottobre 2007 alle 13:20 | #14

    Ciao. Googlando per risolvere il mio problema ho trovato il tuo post, molto interessante, con questo script altrettanto interessante! E mi chiedevo una cosa. Ho un problema simile e vorrei sapere come è possibile modificare questo script per adattarlo alle mie esigenze.
    Vengo e mi spiego.
    Utilizzo kUbuntu e mantengo una directory in una partizione condivisa che aggiorno con i *.deb che apt conserva nella sua cache. Utilizzo questa directory come repository locale, in caso di reinstallazione.
    Mi sorge però il problema dei pacchetti di versioni diverse che, periodicamente, devo cancellare a manina. Mi piacerebbe capire se fosse possibile automatizzare l’operazione in qualche modo. Grazie e ciao

  15. 29 Ottobre 2007 alle 17:42 | #15

    mmm… Con questo script non credo ci puoi fare molto… dovresti invece fare una verifica sul nome del file estraendone la versione e controllare se esiste lo stesso file con lo stesso nome ma con una versione diversa, ovviamente deve essere successiva… mi dispiace, ma non so quanto ti possa aiutare questo script… :)

  16. lucam
    28 Novembre 2007 alle 17:09 | #16

    Ciao,
    se prova a lanciare lo script:

    root@Pc:/# sh dupplicati.sh /home/utente/Desktop/

    ricevo il seguente messaggio:

    Ricerca in corso su /home/lutente/Desktop/ …
    find: manca l’argomento di `-exec’
    Analisi files…
    Terminato.

    Qualche idea?
    Grazie

  17. 29 Novembre 2007 alle 8:40 | #17

    Invece di “sh” usa “bash” per avviare lo script ;)

  18. lucam
    30 Novembre 2007 alle 13:45 | #18

    ciao, anche utilizzando bash mi resituisce lo stesso errore..

  19. 2 Dicembre 2007 alle 9:34 | #19

    Ok, modificato lo script nel post, ora dovrebbe andare ;)
    PS – Come al solito problemi con il CSS… :(

  20. lucam
    3 Dicembre 2007 alle 12:56 | #20

    ok, adesso funziona correttamente..

    grazie :)

    saluti,

  21. lillo
    24 Maggio 2008 alle 4:47 | #21

    Molto buona l’idea ma in fedora non mi funziona quale modifiche devo apportare secondo te?

  22. Andrea
    12 Agosto 2008 alle 13:55 | #22

    Mmmh … ho provato a copiare lo script in TrovaDuplicati.sh e a lanciare
    # TrovaDuplicati.sh prova
    dove prova è una directory contenente un paio di file doppi.

    Il risultato è stato

    bash: tempfile: command not found
    bash: tempfile: command not found
    bash: tempfile: command not found

    Ricerca in corso su prova …
    bash: $LSTFILE: ambiguous redirect
    Analisi files…
    bash: $LSTFILE: ambiguous redirect
    File con i duplicati:
    Terminato.

    Ovviamente non è stato creato nessun nuovo file.
    Dove sbaglio?

    grazie, Andrea

  23. Andrea
    12 Agosto 2008 alle 21:32 | #23

    trovata soluzione:
    nella mia distro bisogna usare mktemp invece di filetemp.
    Per rendere perfetto lo script bisognerebbe aggiungere un controllo di quale comando è disponibile ed usare quello.

    Andrea

  24. 31 Agosto 2008 alle 11:43 | #24

    Ciao.

    Questo script è simile a uno scritto anni fa.
    Allora commisi un errore che anche in questa versione è presente se si considera di localizzare i duplicati in quanto file e non link per liberare spazio.
    Infatti:
    dj@dj-desktop:~$ mkdir test
    dj@dj-desktop:~$ cd test
    dj@dj-desktop:~/test$ echo “ciao” > file1
    dj@dj-desktop:~/test$ ln file1 file2
    dj@dj-desktop:~/test$ ls -li
    totale 8
    270341 -rw-r–r– 2 dj dj 5 2008-08-31 12:34 file1
    270341 -rw-r–r– 2 dj dj 5 2008-08-31 12:34 file2
    dj@dj-desktop:~/test$ ../bin/filesDuplicati.sh .
    Ricerca in corso su . …
    Analisi files…
    Errore ./file1 uguale a \./file2\ ( ASCII text )
    File con i duplicati: /tmp/fileOan3dA
    Terminato.
    dj@dj-desktop:~/test$

    Grazie per lo script in quanto il mio è andato perso e così mi hai risparmiato ore di lavoro.

  25. lizz
    23 Gennaio 2009 alle 11:29 | #25

    Su archlinux bisogna mettere mktemp al posto ti tempfile
    Ciao

  1. No trackbacks yet.