Инструменты Linux для поиска дубликатов файлов?

13

У меня есть большой и растущий набор текстовых файлов, которые все довольно малы (менее 100 байт). Я хочу различить каждую возможную пару файлов и отметить, которые являются дубликатами. Я мог бы написать скрипт Python для этого, но мне интересно, есть ли существующий инструмент командной строки Linux (или, возможно, простая комбинация инструментов), который бы делал это?

Обновление (в ответ на комментарий mfinni ): все файлы находятся в одном каталоге, поэтому все они имеют разные имена файлов. (Но у всех них есть общее расширение имени файла, что позволяет легко выбирать их все с помощью подстановочного знака.)

Дэрил Спитцер
источник
Я предполагаю, что имена файлов не являются дубликатами, только содержимое?
mfinni
pixelbeat.org/fslint, если вы ищете содержимое выше, ссылка может помочь вам в этом. :)
Раджат

Ответы:

22

Там фдупес . Но я обычно использую комбинациюfind . -type f -exec md5sum '{}' \; | sort | uniq -d -w 36

Хьюберт Карио
источник
1
Этот вариант работал для меня: find . -name "*.csv" | xargs md5sum | sort | uniq -D -w 34 (Я использовал uniq -D, и я предпочитаю, чтобы xargs нашел -exec.)
Дэрил Спитцер,
+1 Я не знал о fdupes, этот инструмент выглядит очень полезным.
Зоредаче
3
@Daryl: использование xargsкак это не работает для имен файлов с пробелами, использование -execоднако делает. Использование в -type fкачестве дополнительного аргумента find(может использоваться вместе с -name) ограничивает поиск файлами.
fuenfundachtzig
+1 для fdupes, так как это быстро и для больших двоичных файлов.
Бенгт
В некоторых редких случаях у меня не работал xargs (сбой после определенного количества обработанных файлов), но я не находил -exec, который постоянно просыпался. @fuenfundachtzig, можно использовать xargs -0 --delimiter = "\ n" для обработки файлов такого типа.
ychaouche
6

Ну, есть FSlint - который я не использовал для этого конкретного случая, но я должен быть в состоянии справиться с этим: http://en.flossmanuals.net/FSlint/Introduction

обманщик
источник
+1 за FSlint. Очень интуитивно понятный интерфейс и мощные возможности настройки.
Glutanimate
3

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

Zoredache
источник
2
Вы можете уменьшить количество md5sums, рассчитанное только путем вычисления md5sums для файлов, которые имеют размер, для которого существует более одного файла такого размера. Таким образом, для всех файлов, которые имеют уникальный размер в байтах, вам не нужна md5sum, так как они не могут быть дубликатами чего-либо.
tomsv