Итак, я проверяю хэш-файл md5 моих файлов с этим в качестве моего вывода:
657cf4512a77bf47c39a0482be8e41e0 ./dupes2.txt
657cf4512a77bf47c39a0482be8e41e0 ./dupes.txt
8d60a927ce0f411ec94ac26a4785f749 ./derpina.txt
15f63928b8a1d5337137c38b5d66eed3 ./foo.txt
8d60a927ce0f411ec94ac26a4785f749 ./derp.txt
Однако после запуска find . -type f -exec md5sum '{}' ';' | uniq -w 33, чтобы найти уникальные хэши, я получаю следующее:
657cf4512a77bf47c39a0482be8e41e0 ./dupes2.txt
8d60a927ce0f411ec94ac26a4785f749 ./derpina.txt
15f63928b8a1d5337137c38b5d66eed3 ./foo.txt
8d60a927ce0f411ec94ac26a4785f749 ./derp.txt
По моему мнению, только один из derpina.txt или derp.txt должен появляться, так как их хэши одинаковы. Я что-то упускаю? Может ли кто-нибудь просветить меня о том, почему он выводится следующим образом?
Вход для uniq должен быть отсортирован. Итак, для примерного случая будет работать
find . -type f -exec md5sum '{}' ';' | sort | uniq -w 33
. [F4] (--check-chars=N) делает линии уникальными только для первого столбца; Этот вариант работает для этого случая. но возможности указать соответствующие части строки для uniq ограничены. Например, нет опций для указания работы в некоторых столбцах 3 и 5, игнорируя столбец 4.
В команде sort имеется опция для уникальных линий вывода, а строки уникальны относительно ключей используется для сортировки. Это означает, что мы можем использовать мощный синтаксис ключа sort для определения того, какая часть строк должна быть uniq.
В качестве примера,
find . -type f -exec md5sum '{}' ';' | sort -k 1,1 -u
дает только тот же результат, но часть sort более гибкая для других целей.
Или вы можете установить killdupes, мою программу, чтобы уничтожить каждый последний дублирующий файл!
https://github.com/batchmcnulty/killdupes
: -)