Различные методы получения SHA1 дают разные результаты

Я считаю, что самый быстрый способ - сначала скопировать их локально, а затем выполнить локальный zgrep:

aws s3 cp s3: // bucket / contains / the / журналы. --recursive

Это скопирует ( cp ) все журналы в ваш текущий каталог (. ), а также включит все подпапки ( - recursive ).

Затем локальный zgrep :

zgrep «поисковые слова» * .gz

Или также для рекурсивного поиска подкаталогов:

find -name \ *. Gz -print0 | xargs -0 zgrep "STRING"

(Взято с unix.stackexchange.com .)

2
23.05.2017, 14:33
1 ответ

Разницы не в SHA1, а во входных данных. Синтаксис здесь-строки добавляет новую строку, как мы можем видеть с od:

$ od -c <<< foo
0000000   f   o   o  \n

Таким образом, в вашей команде git вводом являются десять символов Apple Pie\n.

Кроме того, двойные кавычки, которые вы использовали в строках здесь, не поддерживают символы обратной косой черты, такие как \n или \nnn, поэтому <<< "blob 9\0Apple Pie" дает строку, содержащую обратную косую черту и ноль.Однако

printf интерпретирует \0 как байт NUL и не добавляет завершающую новую строку, поэтому с добавленной новой строкой и фиксированной длиной мы должны получить ожидаемый результат:

$ printf 'blob 10\0Apple Pie\n' | sha1sum
23991897e13e47ed0adb91a0082c31c82fe0cbe5  -

Мы могли бы попытаться сделать то же самое со строкой здесь, используя кавычку $'', которая поддерживает \0 как представление байта NUL, но это может не работать в все оболочки, так как байт NUL заканчивает строку. Например. Bash не может с этим справиться, zsh может:

$ zsh -c "sha1sum <<< $'blob 10\0Apple Pie'"
23991897e13e47ed0adb91a0082c31c82fe0cbe5  -
4
27.01.2020, 21:59

Теги

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