fdupes - Et kommandolinjeværktøj til at finde og slette duplikatfiler i Linux


Det er et almindeligt krav at finde og erstatte duplikatfiler for de fleste computerbrugere. At finde og fjerne duplikatfiler er et kedeligt job, der kræver tid og tålmodighed. At finde duplikatfiler kan være meget let, hvis din maskine er drevet af GNU/Linux takket være 'fdupes' -værktøjet.

Fdupes er et Linux-værktøj skrevet af Adrian Lopez i C-programmeringssprog frigivet under MIT-licens. Applikationen er i stand til at finde duplikatfiler i det givne sæt mapper og underkataloger. Fdupes genkender duplikater ved at sammenligne MD5-signatur af filer efterfulgt af en byte-til-byte-sammenligning. En masse muligheder kan overføres med Fdupes til at liste, slette og erstatte filerne med hardlinks til duplikater.

Sammenligningen starter i rækkefølgen:

størrelses sammenligning> Partiel MD5 signatur sammenligning> Fuld MD5 signatur sammenligning> Byte til byte sammenligning.

Installer fdupes på en Linux

Installation af den nyeste version af fdupes (fdupes version 1.51) så let som at køre følgende kommando på Debian-baserede systemer som Ubuntu og Linux Mint.

$ sudo apt-get install fdupes

På CentOS/RHEL- og Fedora-baserede systemer skal du aktivere epel repository for at installere fdupes-pakken.

# yum install fdupes
# dnf install fdupes    [On Fedora 22 onwards]

Bemærk: Standardpakkehåndterings-yum erstattes af dnf fra Fedora 22 og frem ...

Hvordan bruges fdupes-kommandoen?

1. Af demonstrationsformål skal vi oprette et par duplikatfiler under et bibliotek (f.eks. Tecmint) som:

$ 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

Efter at have kørt over kommandoen, skal vi kontrollere, at duplikatfilerne oprettes eller ikke bruger kommandoen 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

Ovenstående script opretter 15 filer, nemlig tecmint1.txt, tecmint2.txt ... tecmint15.txt, og hver fil indeholder de samme data, dvs.

"I Love Tecmint. Tecmint is a very nice community of Linux Users."

2. Søg nu efter duplikatfiler i mappen 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. Søg efter duplikater rekursivt under hvert bibliotek inklusive dets underkataloger ved hjælp af -r-indstillingen.

Det søger på tværs af alle filer og mapper rekursivt, afhængigt af antallet af filer og mapper, det tager noget tid at scanne duplikater. I den gennemsnitlige tid vil du blive præsenteret for den samlede fremgang i terminalen, noget som dette.

$ fdupes -r /home

Progress [37780/54747] 69%

4. Se størrelsen på dubletter, der findes i en mappe ved hjælp af indstillingen -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. Du kan se størrelsen på duplikatfiler for hvert bibliotek og underkataloger, der opstår inden for ved hjælp af indstillingerne -S og -r på samme tid som:

$ 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. Ud over at søge i en mappe eller alle mapperne rekursivt, kan du vælge at vælge i to eller tre mapper efter behov. For ikke at nævne kan du bruge option -S og/eller -r, hvis det kræves.

$ fdupes /home/avi/Desktop/ /home/avi/Templates/

7. For at slette de duplikerede filer, mens du gemmer en kopi, kan du bruge indstillingen '-d'. Der skal udvises ekstra forsigtighed, når du bruger denne mulighed, ellers mister du muligvis de nødvendige filer/data og husk, at processen ikke kan genoprettes.

$ 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]: 

Du bemærker muligvis, at alle dubletterne er anført, og du bliver bedt om at slette, enten en efter en eller et bestemt interval eller alt på én gang. Du kan vælge et interval noget som nedenfor for at slette filer filer af specifikt interval.

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. Fra et sikkerhedsmæssigt synspunkt kan du måske udskrive output af ‘fdupes’ til fil og derefter kontrollere tekstfilen for at bestemme, hvilken fil du vil slette. Dette mindsker chancerne for at få din fil ved et uheld slettet. Du kan gøre:

$ fdupes -Sr /home > /home/fdupes.txt

Bemærk: Du kan erstatte ‘/ home’ med den ønskede mappe. Brug også indstillingen '-r' og '-S', hvis du vil søge henholdsvis rekursivt og udskriftsstørrelse.

9. Du kan udelade den første fil fra hvert sæt matches ved hjælp af optionen '-f'.

Første liste filer i biblioteket.

$ 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

og udelad derefter den første fil fra hvert sæt matches.

$ 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. Kontroller den installerede version af fdupes.

$ fdupes --version

fdupes 1.51

11. Hvis du har brug for hjælp til fdupes, kan du bruge switch '-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

Det er for alle nu. Lad mig vide, hvordan du indtil nu fandt og slettede duplikatfiler i Linux? og fortæl mig også din mening om dette værktøj. Sæt din værdifulde feedback i kommentarfeltet nedenfor, og glem ikke at like/del os og hjælp os med at få spredning.

Jeg arbejder på et andet værktøj kaldet fslint for at fjerne duplikatfiler, vil snart sende og du folk vil elske at læse.