2011-12-30 17 views
9

Tengo 3 archivos binarios. Vamos a llamarlos file1.bin, file2.bin y file3.bin.Diferencia para 3 archivos binarios

  • file1.bin y file2.bin tienen algunas partes en común.
  • file2.bin y file3.bin tienen algunas partes en común.

Quiero encontrar las partes comunes entre file1.bin y file2.bin que son diferentes entre file2.bin y file3.bin.

¿Cómo se recomienda lograr eso? Ya he descargado los archivos binarios en archivos de texto usando xxd y luego hice una diferencia de 3 vías usando vim -d file1.txt file2.txt file3.txt.

Sin embargo, vim marca una parte como cambiada en todos los archivos, incluso si solo ha cambiado en un archivo y permanece igual en los otros dos archivos. Quiero que esos tipos especiales de ocurrencias se marquen de manera diferente.

Respuesta

6

Quizás pueda usar el diff de unix incorporado (creo que es parte de OSX), pero use el --unchanged-group-format para enumerar las similitudes. Haga eso para file1 y file 2. Luego hágalo para file2 y file3. A continuación, puede hacer una diferencia regular en los dos archivos resultantes.

Para tener una idea de cómo obtener las similitudes, echa un vistazo a this post.

-1

Chromium usa bsdiff, luego cambió a calabacín para hacer diferencias binarias como se explica en su blog here. Es posible que encuentre pistas útiles de su blog.

+0

¿Puede hacer 3 vías diffs en la forma que describí en el problema? No puedo averiguar cómo, ¿podrías describir eso? – Dimme

+0

bsdiff funciona en archivos binarios y produce parches binarios. vimdiff espera que los archivos de texto sean su entrada, así que no puedo pensar en una forma de hacer que bsdiff funcione de la manera que te gustaría aquí. Como alternativa, vea si puede hacer uso de la opción '' 'diffexpr''' para convencer a vim de que use una configuración adicional para el programa diff al generar las cifras para los archivos binarios, tal vez use la opción '' -I'' a '' diff'' para especificar una expresión regular para "líneas" que deberían ignorarse al hacer diff. – holygeek

0

La herramienta para la que trabajo (ECMerge) hace eso. Solo tiene que distinguir los 3 archivos binarios, presentará las partes iguales una frente a la otra y los bytes modificados colocados apropiadamente en el medio. No es necesario obtener primero un volcado hexadecimal. Puede crear secuencias de comandos en JavaScript para generar lo que desee en función de los resultados de diferencias y los bytes en los archivos (también funciona en la línea de comandos).

Cuestiones relacionadas