file - mac - ¿Cómo comparar archivos binarios para verificar si son iguales?
comparar archivos en mac (10)
¿Cuál es la manera más fácil (utilizando una herramienta gráfica o línea de comando en Ubuntu Linux) para saber si dos archivos binarios son iguales o no (excepto las marcas de tiempo)? No necesito extraer la diferencia. Solo necesito saber si son iguales o no.
Prueba diff -s
Respuesta corta: ejecuta diff
con el -s
.
Respuesta larga: lea a continuación.
Aquí hay un ejemplo. Comencemos creando dos archivos con contenido binario aleatorio:
$ dd if=/dev/random bs=1k count=1 of=test1.bin
1+0 records in
1+0 records out
1024 bytes (1,0 kB, 1,0 KiB) copied, 0,0100332 s, 102 kB/s
$ dd if=/dev/random bs=1k count=1 of=test2.bin
1+0 records in
1+0 records out
1024 bytes (1,0 kB, 1,0 KiB) copied, 0,0102889 s, 99,5 kB/s
Ahora hagamos una copia del primer archivo:
$ cp test1.bin copyoftest1.bin
Ahora test1.bin y test2.bin deberían ser diferentes:
$ diff test1.bin test2.bin
Binary files test1.bin and test2.bin differ
... y test1.bin y copyoftest1.bin deberían ser idénticos:
$ diff test1.bin copyoftest1.bin
¡Pero espera! ¿Por qué no hay salida?!?
La respuesta es: esto es por diseño. No hay salida en archivos idénticos.
Pero hay diferentes códigos de error:
$ diff test1.bin test2.bin
Binary files test1.bin and test2.bin differ
$ echo $?
1
$ diff test1.bin copyoftest1.bin
$ echo $?
0
Ahora, afortunadamente, no tiene que comprobar los códigos de error todas y cada una de las veces porque puede usar el --report-identical-files
-s
(o --report-identical-files
) para hacer que diff sea más detallado:
$ diff -s test1.bin copyoftest1.bin
Files test1.bin and copyoftest1.bin are identical
Descubrí que Visual Binary Diff era lo que estaba buscando, disponible en:
- Ubuntu:
apt-get install vbindiff
- Mac OS X:
port install vbindiff
través de MacPorts . - Mac OS X:
brew install vbindiff
través de Homebrew
Diff con las siguientes opciones haría una comparación binaria para verificar si los archivos son diferentes y se mostraría si los archivos son los mismos:
diff -qs {file1} {file2}
Si está comparando dos archivos con el mismo nombre en diferentes directorios, puede usar este formulario en su lugar:
diff -qs {file1} --to-file={dir2}
OS X El Capitan
La diff
Unix estándar mostrará si los archivos son iguales o no:
[me@host ~]$ diff 1.bin 2.bin
Binary files 1.bin and 2.bin differ
Si no hay salida del comando, significa que los archivos no tienen diferencias.
Para encontrar defectos en la memoria flash, tuve que escribir este script que muestra todos los bloques 1K que contienen diferencias (no solo el primero como hace cmp -b
)
#!/bin/sh
f1=testinput.dat
f2=testoutput.dat
size=$(stat -c%s $f1)
i=0
while [ $i -lt $size ]; do
if ! r="`cmp -n 1024 -i $i -b $f1 $f2`"; then
printf "%8x: %s/n" $i "$r"
fi
i=$(expr $i + 1024)
done
Salida:
2d400: testinput.dat testoutput.dat differ: byte 3, line 1 is 200 M-^@ 240 M-
2dc00: testinput.dat testoutput.dat differ: byte 8, line 1 is 327 M-W 127 W
4d000: testinput.dat testoutput.dat differ: byte 37, line 1 is 270 M-8 260 M-0
4d400: testinput.dat testoutput.dat differ: byte 19, line 1 is 46 & 44 $
Descargo de responsabilidad: pirateé el script en 5 min. No admite argumentos de línea de comandos ni admite espacios en nombres de archivos
Terminé usando hexdump para convertir los archivos binarios a su representación hexadecimal y luego los abrí en meld / kompare / cualquier otra herramienta diff. A diferencia de ti, yo buscaba las diferencias en los archivos.
hexdump tmp/Circle_24.png > tmp/hex1.txt
hexdump /tmp/Circle_24.png > tmp/hex2.txt
meld tmp/hex1.txt tmp/hex2.txt
Usa sha1 para generar checksum:
sha1 [FILENAME1]
sha1 [FILENAME2]
Use el comando cmp
. Esto saldrá limpiamente si son binarios iguales, o se imprimirá donde ocurre la primera diferencia y saldrá.
Use el comando cmp. Consulte Archivos binarios y Forzar comparaciones de texto para obtener más información.
cmp -b file1 file2
md5 <filename1>
md5 <filename2>
Mira si son lo mismo :-)