Wyszukiwanie w witrynie

fdupes - narzędzie wiersza poleceń do wyszukiwania i usuwania zduplikowanych plików w systemie Linux


Znalezienie i zamiana duplikatów plików jest powszechnym wymogiem większości użytkowników komputerów. Znajdowanie i usuwanie duplikatów plików to męcząca praca wymagająca czasu i cierpliwości. Znalezienie duplikatów plików może być bardzo łatwe, jeśli Twój komputer działa na systemie GNU/Linux, dzięki narzędziu „fdupes”.

Co to jest fdupes?

Fdupes to narzędzie dla systemu Linux napisane przez Adriana Lopeza w języku programowania C, wydane na licencji MIT. Aplikacja potrafi znaleźć duplikaty plików w zadanym zbiorze katalogów i podkatalogów. Fdupes rozpoznaje duplikaty poprzez porównanie podpisów plików MD5, a następnie porównanie bajt po bajcie. Za pomocą Fdupes można przekazać wiele opcji do wyświetlania, usuwania i zastępowania plików twardymi linkami do duplikatów.

Porównanie rozpoczyna się w kolejności:

porównanie rozmiaru > Częściowe porównanie podpisu MD5 > Pełne porównanie podpisu MD5 > Porównanie bajt po bajcie.

Zainstaluj fdupes na Linuksie

Instalacja najnowszej wersji fdupes (fdupes wersja 1.51) jest tak prosta, jak uruchomienie następującego polecenia na systemach opartych na Debianie, takich jak Ubuntu i Linux Mint.

sudo apt-get install fdupes

W systemach opartych na CentOS/RHEL i Fedora musisz włączyć repozytorium epel, aby zainstalować pakiet fdupes.

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

Uwaga: domyślny menedżer pakietów yum został zastąpiony przez dnf z Fedory 22 dalej…

Jak korzystać z polecenia fdupes?

1. Dla celów demonstracyjnych utwórzmy kilka zduplikowanych plików w katalogu (powiedzmy tecmint) po prostu jako:

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 uruchomieniu powyższego polecenia sprawdźmy, czy utworzono duplikaty plików, czy nie za pomocą polecenia 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

Powyższy skrypt tworzy 15 plików, mianowicie tecmint1.txt, tecmint2.txt…tecmint15.txt, a każdy plik zawiera te same dane, tj.

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

2. Teraz wyszukaj zduplikowane pliki w folderze 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. Szukaj duplikatów rekurencyjnie w każdym katalogu, łącznie z jego podkatalogami, używając opcji -r.

Przeszukuje wszystkie pliki i foldery rekurencyjnie. W zależności od liczby plików i folderów skanowanie duplikatów zajmie trochę czasu. W tym czasie zostanie wyświetlony całkowity postęp w terminalu, mniej więcej tak.

$ fdupes -r /home

Progress [37780/54747] 69%

4. Sprawdź rozmiar duplikatów znalezionych w folderze, korzystając z opcji -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. Możesz zobaczyć rozmiar zduplikowanych plików dla każdego napotkanego katalogu i podkatalogu, używając jednocześnie opcji -S i -r , Jak:

$ 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. Oprócz rekurencyjnego wyszukiwania w jednym folderze lub we wszystkich folderach, możesz wybrać opcję w dwóch lub trzech folderach, w zależności od potrzeb. Nie wspominając, że w razie potrzeby możesz użyć opcji -S i/lub -r.

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

7. Aby usunąć zduplikowane pliki, zachowując kopię, możesz użyć opcji „-d”. Należy zachować szczególną ostrożność podczas korzystania z tej opcji, w przeciwnym razie możesz utracić niezbędne pliki/dane i pamiętać, że procesu nie będzie można odzyskać.

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

Możesz zauważyć, że na liście znajdują się wszystkie duplikaty i zostaniesz poproszony o usunięcie jednego po drugim, określonego zakresu lub wszystkich za jednym razem. Możesz wybrać zakres podobny do poniższego, aby usunąć pliki z określonego zakresu.

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. Ze względów bezpieczeństwa możesz wydrukować wynik fdupes do pliku, a następnie sprawdzić plik tekstowy, aby zdecydować, który plik usunąć. Zmniejsza to ryzyko przypadkowego usunięcia pliku. Możesz zrobić:

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

Uwaga: możesz zastąpić „/home” wybranym folderem. Użyj także opcji „-r” i „-S”, jeśli chcesz wyszukiwać odpowiednio rekurencyjnie i Rozmiar wydruku.

9. Możesz pominąć pierwszy plik z każdego zestawu dopasowań, używając opcji „-f”.

Pierwsza lista plików katalogu.

$ 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

a następnie pomiń pierwszy plik z każdego zestawu dopasowań.

$ 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. Sprawdź zainstalowaną wersję fdupes.

$ fdupes --version

fdupes 1.51

11. Jeśli potrzebujesz pomocy dotyczącej fdupów, możesz użyć przełącznika „-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 teraz dla wszystkich. Daj mi znać, jak do tej pory znajdowałeś i usuwałeś zduplikowane pliki w systemie Linux? a także podziel się swoją opinią na temat tego narzędzia. Umieść swoją cenną opinię w sekcji komentarzy poniżej i nie zapomnij polubić/udostępnić nas i pomóż nam się rozprzestrzeniać.

Pracuję nad innym narzędziem o nazwie fslint, które usuwa duplikaty plików. Wkrótce opublikuję post, a wy, ludzie, będziecie zachwyceni czytaniem.