Команда uniq работает неправильно?

Итак, я проверяю хэш-файл 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 должен появляться, так как их хэши одинаковы. Я что-то упускаю? Может ли кто-нибудь просветить меня о том, почему он выводится следующим образом?

1
задан 14 October 2014 в 06:13

2 ответа

Вход для 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 более гибкая для других целей.

5
ответ дан 24 May 2018 в 02:54

Или вы можете установить killdupes, мою программу, чтобы уничтожить каждый последний дублирующий файл!

https://github.com/batchmcnulty/killdupes

: -)

0
ответ дан 24 May 2018 в 02:54

Другие вопросы по тегам:

Похожие вопросы: