Zoeken op website

fdupes - Een opdrachtregelprogramma om dubbele bestanden in Linux te vinden en te verwijderen


Voor de meeste computergebruikers is het een algemene vereiste om dubbele bestanden te vinden en te vervangen. Het vinden en verwijderen van dubbele bestanden is een vermoeiende klus die tijd en geduld vergt. Het vinden van dubbele bestanden kan heel eenvoudig zijn als uw machine draait op GNU/Linux, dankzij het hulpprogramma ‘fdupes’.

Wat is fdupes?

Fdupes is een Linux-hulpprogramma geschreven door Adrian Lopez in de programmeertaal C, uitgegeven onder MIT-licentie. De applicatie kan dubbele bestanden vinden in de opgegeven set mappen en submappen. Fdupes herkennen duplicaten door de MD5-handtekening van bestanden te vergelijken, gevolgd door een vergelijking van byte tot byte. Met Fdupes kunnen veel opties worden doorgegeven om de bestanden weer te geven, te verwijderen en te vervangen door hardlinks naar duplicaten.

De vergelijking begint in de volgorde:

groottevergelijking > Gedeeltelijke vergelijking van MD5-handtekeningen > Volledige vergelijking van MD5-handtekeningen > Vergelijking van byte tot byte.

Installeer fdupes op een Linux

Installatie van de nieuwste versie van fdupes (fdupes versie 1.51) is net zo eenvoudig als het uitvoeren van de volgende opdracht op op Debian gebaseerde systemen zoals Ubuntu en Linux Mint.

sudo apt-get install fdupes

Op op CentOS/RHEL en Fedora gebaseerde systemen moet je de epel-repository inschakelen om het fdupes-pakket te installeren.

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

Opmerking: de standaard pakketbeheerder yum is vervangen door dnf uit Fedora 22 verder…

Hoe gebruik je de fdupes-opdracht?

1. Laten we voor demonstratiedoeleinden een paar dubbele bestanden maken onder een map (bijvoorbeeld tecmint), eenvoudigweg als volgt:

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

Nadat we bovenstaande opdracht hebben uitgevoerd, gaan we controleren of de dubbele bestanden zijn gemaakt of niet met behulp van de ls-opdracht.

$ 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

Het bovenstaande script maakt 15 bestanden aan, namelijk tecmint1.txt, tecmint2.txt…tecmint15.txt en elk bestand bevat dezelfde gegevens, d.w.z.

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

2. Zoek nu naar dubbele bestanden in de map 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. Zoek recursief naar duplicaten onder elke map, inclusief de submappen, met behulp van de optie -r.

Het zoekt recursief door alle bestanden en mappen, afhankelijk van het aantal bestanden en mappen zal het enige tijd duren om duplicaten te scannen. In die tussentijd krijgt u de totale voortgang in de terminal te zien, zoiets als dit.

$ fdupes -r /home

Progress [37780/54747] 69%

4. Bekijk de grootte van duplicaten die in een map worden gevonden met de optie -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. U kunt de grootte van dubbele bestanden zien voor elke map en submappen die u tegenkomt door tegelijkertijd de opties -S en -r te gebruiken , als:

$ 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. Behalve dat u recursief in één map of in alle mappen zoekt, kunt u er ook voor kiezen om in twee of drie mappen te kiezen, zoals vereist. Om nog maar te zwijgen van het feit dat u indien nodig de optie -S en/of -r kunt gebruiken.

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

7. Om de dubbele bestanden te verwijderen en toch een kopie te behouden, kunt u de optie ‘-d’ gebruiken. Extra voorzichtigheid is geboden bij het gebruik van deze optie, anders raakt u mogelijk de benodigde bestanden/gegevens kwijt en is het proces onherstelbaar.

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

Het zal u wellicht opvallen dat alle duplicaten in de lijst staan en dat u wordt gevraagd deze te verwijderen, één voor één of in een bepaald bereik, of allemaal in één keer. U kunt een bereik selecteren zoals hieronder om bestanden met een specifiek bereik te verwijderen.

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. Vanuit veiligheidsoogpunt wilt u wellicht de uitvoer van 'fdupes' naar een bestand afdrukken en vervolgens het tekstbestand controleren om te beslissen welk bestand u wilt verwijderen. Dit verkleint de kans dat uw bestand per ongeluk wordt verwijderd. U kunt het volgende doen:

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

Opmerking: u kunt ‘/home’ vervangen door de gewenste map. Gebruik ook de optie ‘-r’ en ‘-S’ als u respectievelijk recursief en Afdrukgrootte wilt zoeken.

9. Je kunt het eerste bestand uit elke reeks overeenkomsten weglaten door de optie '-f' te gebruiken.

Eerste lijst met bestanden van de map.

$ 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

en laat vervolgens het eerste bestand uit elke set overeenkomsten weg.

$ 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. Controleer de geïnstalleerde versie van fdupes.

$ fdupes --version

fdupes 1.51

11. Als je hulp nodig hebt bij fdupes, kun je de schakelaar ‘-h’ gebruiken.

$ 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

Dat is nu voor iedereen. Laat me weten hoe je tot nu toe dubbele bestanden vond en verwijderde in Linux? en vertel mij ook uw mening over dit hulpprogramma. Plaats uw waardevolle feedback in het commentaargedeelte hieronder en vergeet niet ons leuk te vinden/delen en ons te helpen verspreiden.

Ik werk aan een ander hulpprogramma genaamd fslint om dubbele bestanden te verwijderen. Ik zal dit binnenkort posten en jullie zullen het graag lezen.