Получение md5 во время wget

10

Я wgetсобираю огромные файлы (более 100 ГБ), а затем сравниваю сумму md5 с суммой, размещенной в хранилище. Хотите верьте, хотите нет, но md5sumдля запуска файла такого размера требуется нетривиальное время, поэтому я хотел бы получить сумму параллельно с загрузкой.

Какой лучший способ сделать это? Я не вижу wgetвозможности рассчитать MD5 во время загрузки (что удивительно), поэтому я думаю, что использование teeбудет способом ?!

Fixee
источник
Это возможно? Я уверен, что вам нужен весь двоичный файл, чтобы проверить хэш. Я сомневаюсь, что даже разбиение его на этапы (т. Е. Хэш при загрузке) было бы возможно, поскольку вы не получаете файл в последовательном порядке. В любом случае, я был бы рад увидеть, если у кого-то есть решение.
n0pe
@MaxMackie: Это определенно возможно: поскольку я загружаю весь файл, теоретически wget может запустить его через MD5. Не, это не так.
Fixee

Ответы:

11

На самом деле это может быть возможно:

wget -O - http://example.com/file | tee file | md5sum > file.md5

Однако это предполагает, что у вас есть хеш в файле заранее.

n0pe
источник
1
Это выглядит хорошо, и я не понимаю, как это предполагает наличие «заранее в файле». Он просто генерирует сумму по мере продвижения и записывает ее в файл, который можно использовать для последующего сравнения. Единственный улов может быть накладные расходы памяти.
Калеб
2
@Caleb Какие накладные расходы памяти? md5sum(и любой другой общий алгоритм хеширования, такой как семейство SHA) работает в постоянной памяти. Они предназначены для работы на потоках.
Жиль "ТАК - перестань быть злым"
с дополнительным awkв конце вы можете удалить `-` a конец автоматически. wget -O - "https://example.org/myFile.jpg" | tee file | md5sum | awk '{print $1}' > md5.txt
Макс