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.