fdupes - orodje ukazne vrstice za iskanje in brisanje podvojenih datotek v Linuxu


Običajna zahteva je, da se za večino uporabnikov računalnikov najde in nadomesti podvojene datoteke. Iskanje in odstranjevanje podvojenih datotek je dolgočasno delo, ki zahteva čas in potrpljenje. Iskanje podvojenih datotek je lahko zelo enostavno, če vaš računalnik poganja GNU/Linux, zahvaljujoč pripomočku 'fdupes'.

Fdupes je pripomoček za Linux, ki ga je v programskem jeziku C napisal Adrian Lopez, izdan pod licenco MIT. Aplikacija lahko najde podvojene datoteke v danem naboru imenikov in podimenikov. Fdupes prepozna dvojnike s primerjavo podpisa datotek MD5, čemur sledi primerjava med bajti. S Fdupes lahko prenesete veliko možnosti za seznam, brisanje in zamenjavo datotek s trdimi povezavami do dvojnikov.

Primerjava se začne v vrstnem redu:

primerjava velikosti> Delna primerjava podpisov MD5> Primerjava celotnih podpisov MD5> Primerjava bajtov z bajti.

Namestite fdupes v Linux

Namestitev najnovejše različice fdupes (fdupes različica 1.51) je tako enostavna kot zagon naslednjega ukaza v sistemih, ki temeljijo na Debianu, kot sta Ubuntu in Linux Mint.

$ sudo apt-get install fdupes

V sistemih, ki temeljijo na CentOS/RHEL in Fedora, morate za namestitev paketa fdupes vklopiti repel za epel.

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

Opomba: Privzeti upravitelj paketov yum se od Fedore 22 naprej nadomesti z dnf…

Kako uporabiti ukaz fdupes?

1. Za predstavitvene namene ustvarimo nekaj podvojenih datotek v imeniku (recimo tecmint) preprosto kot:

$ 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

Po zagonu zgornjega ukaza preverimo, ali so podvojene datoteke ustvarjene ali ne uporabljajo ukaza 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

Zgornji skript ustvari 15 datotek in sicer tecmint1.txt, tecmint2.txt… tecmint15.txt in vse datoteke vsebujejo enake podatke, tj.

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

2. Zdaj poiščite podvojene datoteke v mapi 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. Rekurzivno poiščite dvojnike v vseh imenikih, vključno z njihovimi podimeniki, z uporabo možnosti -r.

Rekurzivno išče po vseh datotekah in mapah, odvisno od števila datotek in map bo trajalo nekaj časa za skeniranje dvojnikov. V tem času se vam bo prikazal celoten napredek v terminalu, približno tako.

$ fdupes -r /home

Progress [37780/54747] 69%

4. Oglejte si velikost dvojnikov, najdenih v mapi, z možnostjo -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. Ogledate si lahko velikost podvojenih datotek za vsak imenik in podimenike, ki jih najdete znotraj hkrati z uporabo možnosti -S in -r, kot:

$ 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. Razen iskanja v eni ali vseh mapah rekurzivno lahko po potrebi izberete dve ali tri mape. Da ne omenjam, da lahko uporabite možnost -S in/ali -r, če je potrebno.

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

7. Za brisanje podvojenih datotek in ohranjanje kopije lahko uporabite možnost -d. Pri uporabi te možnosti je treba biti še posebej previden, sicer boste morda izgubili potrebne datoteke/podatke in upoštevajte, da postopek ni mogoče obnoviti.

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

Morda boste opazili, da so na seznamu vsi dvojniki in boste pozvani, da izbrišete enega za drugim ali določen obseg ali vse naenkrat. Za brisanje datotek določenega obsega lahko izberete obseg, kot je spodaj.

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. Z varnostnega vidika boste morda želeli natisniti izhodne podatke iz datoteke »fdupes« in nato preveriti besedilno datoteko, da se odločite, katero datoteko želite izbrisati. To zmanjšuje možnosti za nenamerno izbris datoteke. Lahko naredite:

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

Opomba: ‘/ home’ lahko zamenjate z želeno mapo. Uporabite tudi možnosti '-r' in '-S', če želite rekurzivno iskati oziroma Velikost tiskanja.

9. Prvo datoteko lahko izpustite iz vsakega niza zadetkov z uporabo možnosti -f.

Datoteke prvega seznama v imeniku.

$ 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

in nato izpustite prvo datoteko iz vsakega niza zadetkov.

$ 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. Preverite nameščeno različico fdupes.

$ fdupes --version

fdupes 1.51

11. Če potrebujete kakršno koli pomoč za fdupes, lahko uporabite stikalo '-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

To je zdaj za vse. Sporočite mi, kako ste v Linuxu doslej iskali in brisali podvojene datoteke? in mi povejte tudi svoje mnenje o tej pripomočki. Vnesite svoje dragocene povratne informacije v spodnji odsek za komentarje in ne pozabite nas všečkati/deliti ter nam pomagati, da se razširimo.

Delam z drugim pripomočkom, imenovanim fslint, da odstranim podvojene datoteke, kmalu bo objavljen in ljudje boste radi brali.