2012-04-25 9 views
6

Estoy usando el comando diff para comparar dos archivos de texto. Necesitan ser literalmente emparejados.Diff-command: no imprime líneas que son diferentes pero aún dice que los dos archivos son diferentes

así que uso el diff:

diff binary.out binary.expected

(.. Por cierto, esos archivos no son archivos binarios Están archivo de texto que ellos llaman binaria, porque ese es el nombre del proyecto)

y consiguió

Binary files binary.out and binary.expected differ

Cuando utilizo otra herramienta de diferencias, el más inteligente de todos (También conocido como el zumbido an), y realmente no hay nada diferente entre los dos archivos.

¿Alguien sabe lo que está pasando aquí?

Gracias.

+0

'diff' tiene una noción estrecha de" texto ". Puede tener caracteres especiales que en realidad no son tan especiales: acentos, retornos de carro. – geekosaur

+0

No creo que mis archivos de texto tengan caracteres especiales. Todo lo que contienen es la palabra "SUMA BINARIA", los dígitos "0" y "1" y algunos caracteres de nueva línea. Pero aun así, eso no explica mientras se consideran archivos binarios mis archivos –

+0

Si no tiene la secuencia LF/CR (avance de línea/retorno de carro) al final de cada cadena de su archivo, entonces en la mayoría de los editores de texto de Windows trataría estos archivos como binarios. Estos símbolos son invisibles cuando mira el texto en el modo de texto, pero intente buscar en los archivos en el modo binario y verá 0xD 0xA al final de cada línea. – Flot2011

Respuesta

2

Asegúrese de ignorar el espacio en blanco en las opciones de diff.

También puede ver caracteres Unicode e interpretarlos como binarios. Vea si su herramienta diff tiene una opción para forzar el modo texto.

5

diff de diffutils dice lo siguiente acerca de texto/binario:

diff determina si un archivo es de texto o binario mediante la comprobación de los primeros bytes del archivo; el número exacto de bytes es dependiente del sistema , pero generalmente es varios miles. Si cada byte en esa parte del archivo no es nula, diff considera que el archivo es texto; de lo contrario, considera que el archivo es binario.

por lo tanto, diff de GNU tienen una definición bastante abierta de lo que es el texto, y el uso de la opción --text a la fuerza para tratar el archivo como texto rara vez deben ser necesarios.

¿Ha marcado si binary.out o binary.expected contiene caracteres nulos? ¿Qué versión es tu programa diff?

Cuestiones relacionadas