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!😉

26 thoughts on “Come ti trovo i files duplicati :)

  1. Marco ha detto:

    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

  2. domi84 ha detto:

    Molto interessante…
    Però, per noi comuni mortali che non capiamo quello che c’è scritto lì tutto colorato,😄 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?

  3. 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😉

  4. domi84 ha detto:

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

  5. 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)😉

  6. domi84 ha detto:

    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!!!

  7. beppe ha detto:

    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

  8. Gio ha detto:

    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

  9. 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…🙂

  10. lucam ha detto:

    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

  11. Andrea ha detto:

    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

  12. Andrea ha detto:

    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

  13. 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.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...