Linux bash: сравнивать строки хешей без установки переменных

Я хочу, чтобы простая команда bash сравнила два значения хеша, которые выводят, являются ли они одинаковыми. Вот что я попробовал:

md5sum file1 | awk '{print $1}' # outputs hash value without filename

md5sum file1 > md5sum file2 # no output even though files/hashes differ

Я пробовал варианты на следующих безуспешно до сих пор:

[ md5sum states.txt | awk '{print $1}' == md5sum states_copy.txt | awk '{print $1}' ]

[ (md5sum states.txt | awk '{print $1}') == (md5sum states_copy.txt | awk '{print $1}') ]

Я открыт для решения сценариев или многострочного bash, или использую shasum, но я новичок в Linux и bash, поэтому стараюсь сделать его как можно более простым.

Я использую Ubuntu 18.04.

2 ответа

Решение
[ "$(<states.txt md5sum)" = "$(<states_copy.txt md5sum)" ]
  1. использование $(...) получить вывод команды
  2. Не забудьте приложить $(...) внутри "
  3. Bash test поддерживает одиночный = для сравнения строк, не двойной ==
  4. Перенаправьте файлы в md5sum, используя stdin и используя < Перенаправление.

Есть много способов сделать это, так как вы использовали awk, вы можете попробовать:

md5sum f1 f2|awk '{a[$1]}END{print NR==length(a)}'

Если два хэша совпадают, выведите 0 иначе 1, Вы можете добавить больше файлов к md5sum:

md5sum f1 f2 f3...fn|awk '{a[$1]}END{print NR==length(a)}'
Другие вопросы по тегам