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

Как найти и удалить повторяющиеся файлы в Linux

Я всегда сохраняю резервные копии файлов конфигурации или любых старых файлов где-нибудь на своем жестком диске перед их редактированием или изменением, чтобы я мог восстановить их из резервной копии, если я случайно сделал что-то не так. Но проблема в том, что я забыл очистить эти файлы, и через определенный период времени мой жесткий диск заполняется множеством дубликатов файлов. Мне либо лень чистить старые файлы, либо я боюсь, что могу удалить важные файлы. Если вы похожи на меня и у вас есть несколько копий одних и тех же файлов в разных каталогах резервных копий, вы можете найти и удалить дубликаты файлов, используя инструменты, приведенные ниже, в Unix-подобных операционных системах.

Предостережение:

Будьте осторожны при удалении дубликатов файлов. Если вы не будете осторожны, это приведет к случайной потере данных. Я советую вам уделять особое внимание при использовании этих инструментов.

Найдите и удалите повторяющиеся файлы в Linux

Для целей данного руководства я собираюсь обсудить три утилиты, а именно:

  1. Рднайти,
  2. Фдупес,
  3. ФСлинт.

Эти три утилиты бесплатны, имеют открытый исходный код и работают в большинстве Unix-подобных операционных систем.

1. Найти

Rdfind, расшифровывается как redundant data find. Это бесплатная утилита с открытым исходным кодом для поиска повторяющихся файлов в сети. и/или внутри каталогов и подкаталогов. Он сравнивает файлы по их содержимому, а не по именам файлов. Rdfind использует алгоритм ранжирования для классификации оригинальных и повторяющихся файлов. Если у вас есть два или более одинаковых файла, Rdfind достаточно умен, чтобы найти исходный файл и считать остальные файлы дубликатами. Как только он обнаружит дубликаты, он сообщит вам о них. Вы можете удалить их или заменить их жесткими ссылками или символическими (мягкими) ссылками.

Установка Rdfind

Rdfind доступен в AUR. Таким образом, вы можете установить его в системах на базе Arch, используя любую вспомогательную программу AUR, например Yay, как показано ниже.

yay -S rdfind

В Debian, Ubuntu, Linux Mint:

sudo apt-get install rdfind

В Федоре:

sudo dnf install rdfind

В RHEL, CentOS:

sudo yum install epel-release
sudo yum install rdfind

Использование

После установки просто запустите команду Rdfind вместе с путем к каталогу для сканирования дубликатов файлов.

rdfind ~/Downloads

Сканирование каталога с помощью Rdfind

Как вы видите на снимке экрана выше, команда Rdfind просканирует каталог ~/Downloads и сохранит результаты в файле с именем results.txt в текущем рабочем каталоге. Вы можете просмотреть имена возможных дубликатов файлов в файле results.txt.

$ cat results.txt 
Automatically generated
duptype id depth size device inode priority name
DUPTYPE_FIRST_OCCURRENCE 1469 8 9 2050 15864884 1 /home/sk/Downloads/tor-browser_en-US/Browser/TorBrowser/Tor/PluggableTransports/fte/tests/dfas/test5.regex
DUPTYPE_WITHIN_SAME_TREE -1469 8 9 2050 15864886 1 /home/sk/Downloads/tor-browser_en-US/Browser/TorBrowser/Tor/PluggableTransports/fte/tests/dfas/test6.regex
[...]
DUPTYPE_FIRST_OCCURRENCE 13 0 403635 2050 15740257 1 /home/sk/Downloads/Hyperledger(1).pdf
DUPTYPE_WITHIN_SAME_TREE -13 0 403635 2050 15741071 1 /home/sk/Downloads/Hyperledger.pdf
end of file

Просматривая файл results.txt, вы легко сможете найти дубликаты. Если хотите, вы можете удалить дубликаты вручную.

Кроме того, вы можете использовать опцию -dryrun, чтобы найти все дубликаты в данном каталоге, ничего не меняя, и вывести сводную информацию в свой терминал:

rdfind -dryrun true ~/Downloads

Найдя дубликаты, вы можете заменить их жесткими или символическими ссылками.

Чтобы заменить все дубликаты жесткими ссылками, запустите:

rdfind -makehardlinks true ~/Downloads

Чтобы заменить все дубликаты символическими/мягкими ссылками, запустите:

rdfind -makesymlinks true ~/Downloads

У вас могут быть пустые файлы в каталоге, и вы хотите их игнорировать. Если да, используйте опцию -ignoreempty, как показано ниже.

rdfind -ignoreempty true ~/Downloads

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

Чтобы удалить все дубликаты, просто запустите:

rdfind -deleteduplicates true ~/Downloads

Если вы не хотите игнорировать пустые файлы и удалять их вместе со всеми дубликатами, запустите:

rdfind -deleteduplicates true -ignoreempty false ~/Downloads

Более подробную информацию можно найти в разделе помощи:

rdfind --help

И страницы руководства:

man rdfind

Рекомендуем прочитать:

  • Удалите повторяющиеся файлы с вашего Android с помощью средства устранения дубликатов файлов

2. Фдупес

Fdupes — это еще одна утилита командной строки для выявления и удаления дубликатов файлов в указанных каталогах и подкаталогах. Это бесплатная утилита с открытым исходным кодом, написанная на языке программирования C. Fdupes идентифицирует дубликаты, сравнивая размеры файлов, частичные подписи MD5, полные подписи MD5 и, наконец, выполняя побайтовое сравнение для проверки.

Подобно утилите Rdfind, Fdupes имеет несколько возможностей для выполнения операций, таких как:

  • Рекурсивный поиск повторяющихся файлов в каталогах и подкаталогах.
  • Исключить из рассмотрения пустые и скрытые файлы
  • Показать размер дубликатов
  • Удаляйте дубликаты сразу по мере их появления
  • Исключить файлы с разными битами владельца/группы или разрешения как дубликаты.
  • И многое другое.

Установка Fdupes

Fdupes доступен в репозиториях по умолчанию большинства дистрибутивов Linux.

В Arch Linux и его вариантах, таких как Antergos, Manjaro Linux, установите его с помощью Pacman, как показано ниже.

sudo pacman -S fdupes

В Debian, Ubuntu, Linux Mint:

sudo apt-get install fdupes

В Федоре:

sudo dnf install fdupes

В RHEL, CentOS:

sudo yum install epel-release
sudo yum install fdupes

Использование

Использование Fdupes довольно просто. Просто запустите следующую команду, чтобы найти дубликаты файлов в каталоге, например ~/Downloads.

fdupes ~/Downloads

Пример вывода из моей системы:

/home/sk/Downloads/Hyperledger.pdf
/home/sk/Downloads/Hyperledger(1).pdf

Как видите, у меня есть дубликат файла в каталоге /home/sk/Downloads/. Он показывает дубликаты только из родительского каталога. Как просмотреть дубликаты из подкаталогов? Просто используйте опцию -r, как показано ниже.

fdupes -r ~/Downloads

Теперь вы увидите дубликаты из каталога /home/sk/Downloads/ и его подкаталогов.

Fdupes также может находить дубликаты из нескольких каталогов одновременно.

fdupes ~/Downloads ~/Documents/ostechnix

Вы даже можете выполнять поиск в нескольких каталогах, один из которых рекурсивно, как показано ниже:

fdupes ~/Downloads -r ~/Documents/ostechnix

Приведенные выше команды ищут дубликаты в каталоге «~/Downloads», каталоге «~/Documents/ostechnix» и его подкаталогах.

Иногда вам может потребоваться узнать размер дубликатов в каталоге. Если да, используйте опцию -S, как показано ниже.

$ fdupes -S ~/Downloads
403635 bytes each: 
/home/sk/Downloads/Hyperledger.pdf
/home/sk/Downloads/Hyperledger(1).pdf

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

Мы можем исключить из рассмотрения пустые и скрытые файлы, используя -n и -A соответственно.

fdupes -n ~/Downloads
fdupes -A ~/Downloads

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

Чтобы суммировать информацию о повторяющихся файлах, используйте параметр -m.

fdupes -m ~/Downloads
1 duplicate files (in 1 sets), occupying 403.6 kilobytes

Чтобы удалить все дубликаты, используйте опцию -d.

fdupes -d ~/Downloads

Пример вывода:

[1] /home/sk/Downloads/Hyperledger Fabric Installation.pdf
[2] /home/sk/Downloads/Hyperledger Fabric Installation(1).pdf

Set 1 of 1, preserve files [1 - 2, all]:

Эта команда предложит вам файлы для сохранения и удаления всех остальных дубликатов. Просто введите любое число, чтобы сохранить соответствующий файл и удалить оставшиеся файлы. Будьте более внимательны при использовании этой опции. Вы можете удалить исходные файлы, если не будете осторожны.

Если вы хотите сохранить первый файл в каждом наборе дубликатов и удалить остальные без каждого запроса, используйте параметр -dN (не рекомендуется).

fdupes -dN ~/Downloads

Чтобы удалять дубликаты по мере их обнаружения, используйте флаг -I.

fdupes -I ~/Downloads

Более подробную информацию о Fdupes можно найти в разделе справки и на страницах руководства.

fdupes --help
man fdupes

Читайте также:

  • Устранение дубликатов фотографий: правильно организуйте свою библиотеку фотографий

3. ФСлинт

FSlint — это еще одна утилита для поиска дубликатов файлов, которую я использую время от времени, чтобы избавиться от ненужных дубликатов файлов и освободить дисковое пространство в моей системе Linux. В отличие от двух других утилит, FSlint имеет режимы GUI и CLI. Таким образом, это более удобный инструмент для новичков. FSlint находит не только дубликаты, но также неверные символические ссылки, неверные имена, временные файлы, неверные IDS, пустые каталоги, неудаленные двоичные файлы и т. д.

Установка FSlint

FSlint доступен в AUR, поэтому его можно установить с помощью любых помощников AUR.

yay -S fslint

В Debian, Ubuntu, Linux Mint:

sudo apt-get install fslint

В Федоре:

sudo dnf install fslint

В RHEL, CentOS:

sudo yum install epel-release
sudo yum install fslint

После установки запустите его из меню или панели запуска приложений.

Вот как выглядит графический интерфейс FSlint.

Интерфейс Фслинт

Как видите, интерфейс FSlint удобен и не требует пояснений. На вкладке Путь поиска добавьте путь к каталогу, который вы хотите сканировать, и нажмите кнопку Найти в левом нижнем углу, чтобы найти дубликаты. Установите флажок «Рекурсия», чтобы рекурсивно искать дубликаты в каталогах и подкаталогах. FSlint быстро просканирует заданный каталог и выведет их список.

графический интерфейс fslint

Из списка выберите дубликаты, которые вы хотите удалить, и выберите любой из них, выполнив такие действия, как «Сохранить», «Удалить», «Объединить» и «Симлинк».

На вкладке Параметры расширенного поиска вы можете указать пути, которые следует исключить при поиске дубликатов.

расширенный поиск fslint

Параметры командной строки FSlint

FSlint предоставляет набор следующих утилит CLI для поиска дубликатов в вашей файловой системе:

  • findup - найти ДУБЛИРУЮЩИЕСЯ файлы.
  • findnl — поиск имени (проблемы с именами файлов)
  • findu8 - найти имена файлов с неверной кодировкой utf8.
  • findbl — найти плохие ссылки (различные проблемы с символическими ссылками)
  • findsn - найти то же имя (проблемы с конфликтующими именами)
  • найдено - найти пустые каталоги.
  • find - найти файлы с мертвыми идентификаторами пользователей.
  • findns - найти необрезанные исполняемые файлы.
  • findrs - найти лишние пробелы в файлах.
  • findtf — найти временные файлы
  • findul - найти возможно неиспользуемые библиотеки.
  • zipdir — Освободить ненужное место в записях каталога ext2.

Все эти утилиты доступны в папке /usr/share/fslint/fslint/fslint.

Например, чтобы найти дубликаты в заданном каталоге, выполните:

/usr/share/fslint/fslint/findup ~/Downloads/

Аналогично, чтобы найти пустые каталоги, команда будет такой:

/usr/share/fslint/fslint/finded ~/Downloads/

Чтобы получить более подробную информацию о каждой утилите, например findup, выполните:

/usr/share/fslint/fslint/findup --help

Более подробную информацию о FSlint можно найти в разделе справки и на страницах руководства.

/usr/share/fslint/fslint/fslint --help
man fslint

Заключение

Теперь вы знаете о трех инструментах для поиска и удаления ненужных дубликатов файлов в Linux. Среди этих трех инструментов я часто использую Rdfind. Это не значит, что две другие утилиты неэффективны, но Rdfind меня пока устраивает. Что ж, твоя очередь. Какой ваш любимый инструмент и почему? Дайте нам знать о них в разделе комментариев ниже.

Ресурсы:

  • Веб-сайт Rdfind
  • Репозиторий Rdfind на GitHub
  • Репозиторий Fdupes на GitHub
  • Веб-сайт FSlint
  • Репозиторий FSlint на GitHub

Статьи по данной тематике