Shell: сравнить содержимое файла, а не контрольные суммы

Если ссылки выводятся как полные URL-адреса, они должны быть активными при наведении на них (указателем мыши), удерживая нажатой клавишу Ctrl .

3
04.07.2018, 13:57
1 ответ

Если файлы содержат только постоянные назначения, их можно сначала отсортировать. С заменой процесса (Bash/zsh):

cmp <(sort foo) <(sort bar)

(или cmp -sкак обычно)

Если вы имеете дело со стандартной оболочкой, вам потребуются временные файлы:

a=$(mktemp) b=$(mktemp)
sort foo > "$a"; sort bar > "$b"
cmp "$a" "$b"
rm "$a" "$b"

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

Если вам нужен хэш, сделайте что-то вроде:

cksum1=$(sort foo | sha256sum)
cksum2=$(sort bar | sha256sum)

Но если вы выполняете сравнение локально, вероятно, не имеет большого значения, если вы просто сравниваете файлы напрямую, так как вам нужно прочитать их полностью, чтобы убедиться, что они одинаковы, и cmpможно остановить рано, если заметит разницу, в то время как sha256sumне может.

Если файлы находятся на разных машинах, то, конечно, проще передать только хэш. Но даже в этом случае я бы предложил использовать SHA -256 (как указано выше )или SHA -512 вместо MD5, если это возможно(*). Даже busyboxреализует sha256sum, так что вы можете его получить.

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

(*MD5 имеет известные недостатки, которые позволяют генерировать коллизии, в то время как хэши SHA -2 считаются более сильными. В некоторых случаях вам может сойти с рук MD5, но это зависит от деталей, и лучше перестраховаться.)

7
27.01.2020, 21:12

Теги

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