Поиск по сайту:

fdupes — инструмент командной строки для поиска и удаления повторяющихся файлов в Linux


Поиск и замена повторяющихся файлов является обычным требованием для большинства пользователей компьютеров. Поиск и удаление дубликатов файлов — утомительная работа, требующая времени и терпения. Найти дубликаты файлов может быть очень легко, если на вашем компьютере установлен GNU/Linux, благодаря утилите «fdupes».

Что такое фдупес?

Fdupes — это утилита для Linux, написанная Адрианом Лопесом на языке программирования C и выпущенная под лицензией MIT. Приложение способно находить дубликаты файлов в заданном наборе каталогов и подкаталогов. Fdupes распознает дубликаты, сравнивая подписи файлов MD5 с последующим побайтовым сравнением. С помощью Fdupes можно передать множество опций для перечисления, удаления и замены файлов жесткими ссылками на дубликаты.

Сравнение начинается в следующем порядке:

сравнение размеров > Частичное сравнение сигнатур MD5 > Полное сравнение сигнатур MD5 > Побайтовое сравнение.

Установите fdupes в Linux

Установить последнюю версию fdupes (fdupes версии 1.51) так же просто, как выполнить следующую команду в системах на базе Debian, таких как Ubuntu и Linux Mint.

sudo apt-get install fdupes

В системах на базе CentOS/RHEL и Fedora необходимо включить репозиторий epel для установки пакета fdupes.

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

Примечание. Менеджер пакетов по умолчанию yum заменен на dnf из Fedora 22. вперед…

Как использовать команду fdupes?

1. В целях демонстрации давайте создадим несколько дубликатов файлов в каталоге (скажем, tecmint) просто следующим образом:

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

После выполнения вышеуказанной команды давайте проверим, созданы или нет файлы-дубликаты с помощью команды 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

Приведенный выше сценарий создает 15 файлов, а именно tecmint1.txt, tecmint2.txt… tecmint15.txt, и каждый файл содержит одни и те же данные, т.е.

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

2. Теперь найдите дубликаты файлов в папке 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. Рекурсивно ищите дубликаты в каждом каталоге, включая его подкаталоги, с помощью параметра -r.

Он выполняет рекурсивный поиск по всем файлам и папкам, в зависимости от количества файлов и папок сканирование дубликатов займет некоторое время. Тем временем вам будет представлен общий прогресс в терминале, примерно так.

$ fdupes -r /home

Progress [37780/54747] 69%

4. Посмотрите размер дубликатов, найденных в папке, с помощью параметра -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. Вы можете увидеть размер повторяющихся файлов для каждого каталога и подкаталогов, встречающихся в нем, используя параметры -S и -r одновременно. , как:

$ 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. Помимо рекурсивного поиска в одной папке или во всех папках, вы можете выбрать две или три папки по своему усмотрению. Не говоря уже о том, что вы можете использовать опцию -S и/или -r, если необходимо.

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

7. Чтобы удалить дубликаты файлов, сохранив копию, вы можете использовать опцию ’-d’. При использовании этой опции следует проявлять особую осторожность, иначе вы можете потерять необходимые файлы/данные, и помните, что процесс невозможно будет восстановить.

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

Вы можете заметить, что в списке перечислены все дубликаты, и вам будет предложено удалить их по одному, в определенном диапазоне или все за один раз. Вы можете выбрать диапазон, как показано ниже, чтобы удалить файлы определенного диапазона.

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. С точки зрения безопасности вы можете распечатать вывод 'fdupes' в файл, а затем проверить текстовый файл, чтобы решить, какой файл удалить. Это уменьшит вероятность случайного удаления вашего файла. Вы можете сделать:

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

Примечание. Вы можете заменить ’/home’ на нужную папку. Также используйте опции ’-r’ и ’-S’, если вы хотите выполнять рекурсивный поиск и размер печати соответственно.

9. Вы можете исключить первый файл из каждого набора совпадений, используя опцию ’-f’.

Первый список файлов каталога.

$ 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

а затем исключить первый файл из каждого набора совпадений.

$ 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. Проверьте установленную версию fdupes.

$ fdupes --version

fdupes 1.51

11. Если вам нужна помощь по fdupes, вы можете использовать переключатель ’-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

Это теперь для всех. Дайте мне знать, как вы до сих пор находили и удаляли дубликаты файлов в Linux? а также выскажите свое мнение об этой утилите. Оставьте свой ценный отзыв в разделе комментариев ниже и не забудьте поставить нам лайк/поделиться и помочь нам распространиться.

Я работаю над другой утилитой под названием fslint для удаления дубликатов файлов, скоро опубликую, и вам понравится ее читать.