Проверить, идентичны ли какие-либо два файла в каталоге?

Проверить, идентичны ли какие-либо два файла в каталоге?

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

Я пробовал:

cmp file1.csv file2.csv || echo "files are different"

Это говорит мне о том, что первые два файла различны.

Я также пробовал:

 diff -q --from-file *.csv

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

Но как я могу проверить это для каждого файла, не делая этого вручную?

решение1

Следующее работает у меня в Linux. У меня нет Mac Terminal, чтобы проверить, работает ли это там.

$ md5sum * | sort | uniq --check-chars=32 --group
36da49e13da596245e85e9e47ab8a04f *y

8c3c2e6aa3be26d9f1bbbcd9a401e88e *x
8c3c2e6aa3be26d9f1bbbcd9a401e88e *z

Программа uniqтребует сортированного ввода. Проверьте ее man-страницу для других параметров вывода.

решение2

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

shasum * | sort | uniq 

И это должно дать вам результаты.

решение3

Что вам действительно нужно, так это хороший скрипт оболочки. Безмозглый скрипт оболочки будет:

for i in `ls`; do diff -sq --from-file=$i `ls` 2> /dev/null; done | grep identical

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

Другие параметры для сравнения, которые вы, возможно, захотите рассмотреть, это -w, если пробелы не имеют значения, -b, если наличие пробелов важно, но вас не волнует, сколько их и какого типа, --strip-trailing-cr, если некоторые файлы были созданы в системе, которая считает, что ей нужны и новая строка, и возврат каретки.

Связанный контент