Obtendo o md5 durante o wget

10

Estou wgetusando arquivos enormes (acima de 100 GB) e depois comparando meu md5sum com a soma postada no repositório. Acredite ou não, md5sumleva um tempo não trivial para ser executado em um arquivo desse tamanho, então eu gostaria de obter a soma em paralelo com o download.

Qual é a melhor forma de fazer isso? Não vejo uma wgetopção para calcular o MD5 durante o download (surpreendentemente), então acho que usar teeseria o caminho a seguir ?!

Fixee
fonte
Isso é possível? Tenho certeza que você precisa do binário inteiro para verificar o hash. Eu duvido que mesmo dividi-lo em etapas (por exemplo, hash durante o download) seria possível, pois você pode não estar recebendo o arquivo em ordem seqüencial. De qualquer forma, eu ficaria feliz em ver se alguém tem uma solução.
n0pe 20/08/11
@MaxMackie: É definitivamente possível: como estou baixando o arquivo inteiro, o wget poderia, teoricamente, executá-lo no MD5. Unf, não.
Fixee

Respostas:

11

Na verdade, isso pode ser possível:

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

No entanto, isso pressupõe que você tenha o hash em um arquivo anteriormente.

n0pe
fonte
1
Isso parece bom, e não vejo como isso pressupõe que o "tenha um arquivo anteriormente". Ele apenas gera a soma à medida que avança e a grava em um arquivo que você pode usar para comparar posteriormente. O único problema pode ser a sobrecarga de memória.
Caleb
2
@ Caleb Que sobrecarga de memória? md5sum(e qualquer outro algoritmo de hash comum, como a família SHA) opera na memória constante. Eles são projetados para trabalhar em fluxos.
Gilles 'SO- stop be evil' em
com um adicional awkno final, você pode remover o `-`a final automaticamente. wget -O - "https://example.org/myFile.jpg" | tee file | md5sum | awk '{print $1}' > md5.txt
Max