1

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

Я пробовал:

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

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

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

 diff -q --from-file *.csv

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

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

3 ответа3

3

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

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

8c3c2e6aa3be26d9f1bbbcd9a401e88e *x
8c3c2e6aa3be26d9f1bbbcd9a401e88e *z

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

1

В дополнение к ответу Стивена, вы должны ввести это в терминал:

shasum * | sort | uniq 

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

0

То, что вы действительно хотите, это хороший сценарий оболочки. Сценарий с мертвой оболочкой будет:

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .