fdupes - Uno strumento da riga di comando per trovare ed eliminare file duplicati in Linux
È un requisito comune trovare e sostituire file duplicati per la maggior parte degli utenti di computer. Trovare e rimuovere file duplicati è un lavoro faticoso che richiede tempo e pazienza. Trovare file duplicati può essere molto semplice se il tuo computer è alimentato da GNU/Linux, grazie all'utilità "fdupes".
Cos'è Fdupes?
Fdupes è un'utilità Linux scritta da Adrian Lopez nel linguaggio di programmazione C rilasciata sotto licenza MIT. L'applicazione è in grado di trovare file duplicati in un determinato insieme di directory e sottodirectory. Fdupe riconosce i duplicati confrontando la firma MD5 dei file seguita da un confronto byte per byte. Molte opzioni possono essere passate con Fdupes per elencare, eliminare e sostituire i file con collegamenti fisici ai duplicati.
Il confronto inizia nell'ordine:
Confronto dimensioni > Confronto parziale firme MD5 > Confronto firme MD5 complete > Confronto byte per byte.
Installa fdupes su Linux
L'installazione dell'ultima versione di fdupes (fdupes versione 1.51) è semplice come eseguire il seguente comando su sistemi basati su Debian come Ubuntu e Linux Mint.
sudo apt-get install fdupes
Sui sistemi basati su CentOS/RHEL e Fedora, è necessario attivare il repository epel per installare il pacchetto fdupes.
yum install fdupes
dnf install fdupes [On Fedora 22 onwards]
Nota: il gestore pacchetti predefinito yum è sostituito da dnf da Fedora 22 in poi…
Come usare il comando fdupes?
1. A scopo dimostrativo, creiamo alcuni file duplicati in una directory (ad esempio tecmint) semplicemente come:
mkdir /home/"$USER"/Desktop/tecmint && cd /home/"$USER"/Desktop/tecmint && for i in {1..15}; do echo "I Love Tecmint. Tecmint is a very nice community of Linux Users." > tecmint${i}.txt ; done
Dopo aver eseguito il comando precedente, verifichiamo che i file duplicati siano stati creati o non utilizzino il comando ls.
$ ls -l
total 60
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint10.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint11.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint12.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint13.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint14.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint15.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint1.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint2.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint3.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint4.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint5.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint6.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint7.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint8.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint9.txt
Lo script sopra crea 15 file ovvero tecmint1.txt, tecmint2.txt…tecmint15.txt e ogni file contiene gli stessi dati, ovvero
"I Love Tecmint. Tecmint is a very nice community of Linux Users."
2. Ora cerca i file duplicati all'interno della cartella tecmint.
$ fdupes /home/$USER/Desktop/tecmint
/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt
3. Cerca duplicati in modo ricorsivo in ogni directory comprese le sue sottodirectory utilizzando l'opzione -r.
Esegue la ricerca in tutti i file e le cartelle in modo ricorsivo e, a seconda del numero di file e cartelle, la scansione dei duplicati richiederà del tempo. Nel frattempo, ti verrà presentato il progresso totale nel terminale, qualcosa del genere.
$ fdupes -r /home
Progress [37780/54747] 69%
4. Visualizza la dimensione dei duplicati trovati all'interno di una cartella utilizzando l'opzione -S.
$ fdupes -S /home/$USER/Desktop/tecmint
65 bytes each:
/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt
5. Puoi vedere la dimensione dei file duplicati per ogni directory e sottodirectory incontrate all'interno utilizzando le opzioni -S e -r contemporaneamente , COME:
$ fdupes -Sr /home/avi/Desktop/
65 bytes each:
/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt
107 bytes each:
/home/tecmint/Desktop/resume_files/r-csc.html
/home/tecmint/Desktop/resume_files/fc.html
6. Oltre alla ricerca ricorsiva in una o in tutte le cartelle, puoi scegliere di scegliere tra due o tre cartelle, a seconda delle esigenze. Per non parlare della possibilità di utilizzare l'opzione -S e/o -r se necessario.
fdupes /home/avi/Desktop/ /home/avi/Templates/
7. Per eliminare i file duplicati conservando una copia puoi utilizzare l'opzione '-d'. È necessario prestare particolare attenzione durante l'utilizzo di questa opzione, altrimenti potresti finire per perdere i file/dati necessari e tenere presente che il processo è irrecuperabile.
$ fdupes -d /home/$USER/Desktop/tecmint
[1] /home/tecmint/Desktop/tecmint/tecmint13.txt
[2] /home/tecmint/Desktop/tecmint/tecmint8.txt
[3] /home/tecmint/Desktop/tecmint/tecmint11.txt
[4] /home/tecmint/Desktop/tecmint/tecmint3.txt
[5] /home/tecmint/Desktop/tecmint/tecmint4.txt
[6] /home/tecmint/Desktop/tecmint/tecmint6.txt
[7] /home/tecmint/Desktop/tecmint/tecmint7.txt
[8] /home/tecmint/Desktop/tecmint/tecmint9.txt
[9] /home/tecmint/Desktop/tecmint/tecmint10.txt
[10] /home/tecmint/Desktop/tecmint/tecmint2.txt
[11] /home/tecmint/Desktop/tecmint/tecmint5.txt
[12] /home/tecmint/Desktop/tecmint/tecmint14.txt
[13] /home/tecmint/Desktop/tecmint/tecmint1.txt
[14] /home/tecmint/Desktop/tecmint/tecmint15.txt
[15] /home/tecmint/Desktop/tecmint/tecmint12.txt
Set 1 of 1, preserve files [1 - 15, all]:
Potresti notare che tutti i duplicati sono elencati e ti viene richiesto di eliminarli uno per uno o un determinato intervallo o tutti in una volta. È possibile selezionare un intervallo simile a quello riportato di seguito per eliminare i file di un intervallo specifico.
Set 1 of 1, preserve files [1 - 15, all]: 2-15
[-] /home/tecmint/Desktop/tecmint/tecmint13.txt
[+] /home/tecmint/Desktop/tecmint/tecmint8.txt
[-] /home/tecmint/Desktop/tecmint/tecmint11.txt
[-] /home/tecmint/Desktop/tecmint/tecmint3.txt
[-] /home/tecmint/Desktop/tecmint/tecmint4.txt
[-] /home/tecmint/Desktop/tecmint/tecmint6.txt
[-] /home/tecmint/Desktop/tecmint/tecmint7.txt
[-] /home/tecmint/Desktop/tecmint/tecmint9.txt
[-] /home/tecmint/Desktop/tecmint/tecmint10.txt
[-] /home/tecmint/Desktop/tecmint/tecmint2.txt
[-] /home/tecmint/Desktop/tecmint/tecmint5.txt
[-] /home/tecmint/Desktop/tecmint/tecmint14.txt
[-] /home/tecmint/Desktop/tecmint/tecmint1.txt
[-] /home/tecmint/Desktop/tecmint/tecmint15.txt
[-] /home/tecmint/Desktop/tecmint/tecmint12.txt
8. Dal punto di vista della sicurezza, potresti voler stampare l'output di 'fdupes' su file e quindi controllare il file di testo per decidere quale file eliminare. Ciò diminuisce le possibilità che il tuo file venga eliminato accidentalmente. Puoi fare:
fdupes -Sr /home > /home/fdupes.txt
Nota: puoi sostituire '/home' con la cartella desiderata. Utilizza anche l'opzione '-r' e '-S' se desideri cercare in modo ricorsivo e Dimensioni di stampa, rispettivamente.
9. Puoi omettere il primo file da ogni serie di corrispondenze utilizzando l'opzione '-f'.
Primo Elenco dei file della directory.
$ ls -l /home/$USER/Desktop/tecmint
total 20
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint9 (3rd copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint9 (4th copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint9 (another copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint9 (copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug 8 11:22 tecmint9.txt
e quindi omettere il primo file da ogni serie di corrispondenze.
$ fdupes -f /home/$USER/Desktop/tecmint
/home/tecmint/Desktop/tecmint9 (copy).txt
/home/tecmint/Desktop/tecmint9 (3rd copy).txt
/home/tecmint/Desktop/tecmint9 (another copy).txt
/home/tecmint/Desktop/tecmint9 (4th copy).txt
10. Controlla la versione installata di fdupes.
$ fdupes --version
fdupes 1.51
11. Se hai bisogno di aiuto su fdupe puoi utilizzare l'interruttore '-h'.
$ fdupes -h
Usage: fdupes [options] DIRECTORY...
-r --recurse for every directory given follow subdirectories
encountered within
-R --recurse: for each directory given after this option follow
subdirectories encountered within (note the ':' at
the end of the option, manpage for more details)
-s --symlinks follow symlinks
-H --hardlinks normally, when two or more files point to the same
disk area they are treated as non-duplicates; this
option will change this behavior
-n --noempty exclude zero-length files from consideration
-A --nohidden exclude hidden files from consideration
-f --omitfirst omit the first file in each set of matches
-1 --sameline list each set of matches on a single line
-S --size show size of duplicate files
-m --summarize summarize dupe information
-q --quiet hide progress indicator
-d --delete prompt user for files to preserve and delete all
others; important: under particular circumstances,
data may be lost when using this option together
with -s or --symlinks, or when specifying a
particular directory more than once; refer to the
fdupes documentation for additional information
-N --noprompt together with --delete, preserve the first file in
each set of duplicates and delete the rest without
prompting the user
-v --version display fdupes version
-h --help display this help message
Questo è tutto adesso. Fammi sapere come hai trovato ed eliminato i file duplicati fino ad ora in Linux? e dimmi anche la tua opinione su questa utilità. Inserisci il tuo prezioso feedback nella sezione commenti qui sotto e non dimenticare di mettere mi piace/condividerci e aiutarci a diffonderci.
Sto lavorando su un'altra utility chiamata fslint per rimuovere i file duplicati, la pubblicherò presto e voi adorerete leggerla.