Tengo un archivo descargado con éxito y otra descarga fallida (solo los primeros 100 MB de un archivo grande) que sospecho que es el mismo archivo.
Para verificar esto, me gustaría verificar sus hashes, pero como solo tengo una parte del archivo descargado sin éxito, solo quiero hacer el hash de los primeros megabytes más o menos.
¿Cómo hago esto?
El sistema operativo sería Windows, pero tengo Cygwin y MinGW instalados.
Respuestas:
Crear hashes para comparar archivos tiene sentido si compara un archivo con muchos o cuando compara muchos archivos entre sí.
No tiene sentido comparar dos archivos una sola vez: el esfuerzo para calcular los hashes es al menos tan alto como caminar sobre los archivos y compararlos directamente.
Una herramienta eficiente de comparación de archivos es
cmp
:También puede combinarlo
dd
para comparar partes arbitrarias (no necesariamente desde el principio) de dos archivos, por ejemplo:fuente
cmp
es 99.99% seguro que ya está instalado si estábash
ejecutando, y hace el trabajo. De hecho,cmp -n 131072 one.zip two.zip
también hará el trabajo. Pocos caracteres para escribir y ejecución más rápida. Calcular un hash no tiene sentido. Requiere que se lea todo el archivo de 100 MB, más una porción de 100 MB del archivo completo, lo cual no tiene sentido. Si son archivos zip y son diferentes, habrá una diferencia dentro de los primeros cientos de bytes. Sin embargo, Readahead ofrece 128k de forma predeterminada, por lo que también puede comparar 128k (el mismo costo que comparar 1 byte).--bytes
opción solo complica la tarea. Simplemente ejecutecmp
sin esta opción y le mostrará el primer byte que difiere entre los archivos. Si todos los bytes son iguales, se mostraráEOF
en el archivo más corto. Esto le dará más información que su ejemplo: cuántos bytes son correctos.cmp
(y, creo que casi todo el mundo lo hace), se puede utilizar--ignore-initial
y--bytes
argumentos en lugar de complicar las cosas con invocaciones dedd
.Lo siento, no puedo intentar exactamente eso, pero de esta manera funcionará
Esto te dará los primeros 100 megabytes de ambos archivos.
Ahora obtén los hashes:
También puedes ejecutarlo directamente:
fuente
cmp
).cmp
) es un ganador sin lugar a dudas. Pero esta forma de resolver el problema (usando hashes) también tiene derecho a existir siempre y cuando realmente resuelva el problema (:Todo el mundo parece seguir la ruta de Unix / Linux con esto, pero solo se pueden comparar 2 archivos fácilmente con los comandos estándar de Windows:
FC /B file file2
FC está presente en todas las versiones de Windows NT que se hayan creado. Y (si no recuerdo mal) también estaba presente en DOS.
Es un poco lento, pero eso no importa para un uso único.
fuente
Podrías comparar directamente los archivos, con un programa de diferencias binario / hexadecimal como
vbindiff
. Compara rápidamente archivos de hasta 4 GB en Linux y Windows.Se ve más o menos así, solo con la diferencia resaltada en rojo (1B vs 1C):
fuente
vbindiff
(y el de Konradcmp
) compara datos binarios, byte por byte. De hecho, es mucho más probable que los valores experimenten colisionesSé que dice Bash, pero OP también afirma que tienen Windows. Para cualquiera que quiera / requiera una solución de Windows, hay un programa llamado HxD que es un editor hexadecimal que puede comparar dos archivos. Si los archivos son de diferentes tamaños, indicará si las partes disponibles son las mismas. Y si es necesario, es capaz de ejecutar sumas de verificación para lo que esté seleccionado actualmente. Es gratis y se puede descargar desde: el sitio web HxD . No tengo ninguna conexión con los autores, lo he estado usando durante años.
fuente
cmp le dirá cuándo dos archivos son idénticos hasta la longitud del archivo más pequeño:
cmp le dice que la comparación encontró un EOF en el archivo antes de detectar cualquier diferencia entre los dos archivos.
fuente