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)" ]
- использование
$(...)
получить вывод команды - Не забудьте приложить
$(...)
внутри"
- Bash test поддерживает одиночный
=
для сравнения строк, не двойной==
- Перенаправьте файлы в 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)}'