Fatmawati Achmad Zaenuri / Shutterstock.com
¿Necesita ver las diferencias entre dos revisiones de un archivo de texto? Después diff
es el comando que necesitas. Este tutorial le muestra cómo usar diff
en Linux y macOS, la forma más sencilla.
Sumérgete en el diff
la diff
El comando compara dos archivos y produce una lista de las diferencias entre los dos. Para ser más precisos, produce una lista de cambios que deben realizarse en el primer archivo para que coincida con el segundo archivo. Si tiene esto en cuenta, comprenderá más fácilmente el resultado de diff
. la diff
El comando fue diseñado para encontrar las diferencias entre los archivos de código fuente y producir resultados que pudieran ser leídos y explotados por otros programas, como el habitación orden. En este tutorial, veremos las formas más útiles y fáciles de usar de usar diff
.
Profundicemos en el meollo del asunto y analicemos dos archivos. El orden de los archivos en la línea de comando determina qué archivo diff
considera el «primer archivo» y lo considera el «segundo archivo». En el siguiente ejemplo, alpha1 es el primer archivo y alpha2 es el segundo archivo. Ambos archivos contienen el alfabeto fonetico pero el segundo archivo, alpha2, ha sufrido algunos cambios más para que los dos archivos no sean iguales.
Podemos comparar los archivos con este comando. Pegar diff
, un espacio, el nombre del primer archivo, un espacio, el nombre del segundo archivo y luego presione Entrar.
diff alpha1 alpha2
¿Cómo diseccionamos este resultado? Una vez que sepa qué buscar, no es tan malo. Cada diferencia se enumera a su vez en una sola columna y cada diferencia está etiquetada. La etiqueta contiene números a ambos lados de una letra, como 4c4
. El primer número es el número de fila en alpha1 y el segundo número es el número de fila en alpha2. La letra del medio puede ser:
- vs: La línea del primer archivo debe modificarse para que coincida con la línea del segundo archivo.
- D: La línea del primer archivo debe eliminarse para que coincida con el segundo archivo.
- a: Se debe agregar contenido adicional al primer archivo para que coincida con el segundo archivo.
la 4c4
en nuestro ejemplo, díganos que la fila cuatro de alpha1 debe cambiarse para que coincida con la fila cuatro de alpha2. Ésta es la primera diferencia entre los dos archivos que diff
encontrar.
Líneas que comienzan con <
consulte el primer archivo, en nuestro ejemplo alpha1, y las líneas que comienzan con >
consulte el segundo archivo, alpha2. La línea < Delta
nos dice que la palabra Delta es el contenido de la línea cuatro en alpha1. La línea > Dave
nos dice que la palabra Dave es el contenido de la línea cuatro en alpha2. Entonces, básicamente, necesitamos reemplazar Delta con Dave en la línea cuatro en alpha1, para que esa línea coincida en ambos archivos.
El siguiente cambio está indicado por el 12c12
. Aplicando la misma lógica, esto nos dice que la línea 12 de alpha1 contiene la palabra Lima, pero la línea 12 de alpha2 contiene la palabra Linux.
El tercer cambio se refiere a una fila que se ha eliminado de alpha2. La etiqueta 21d20
se descifra como «la línea 21 debe eliminarse del primer archivo para que los dos archivos se sincronicen desde la línea 20». la < Uniform
line nos muestra el contenido de la línea que debería eliminarse de alpha1.
La cuarta diferencia está etiquetada 26a26,28
. Este cambio se refiere a tres líneas más que se han agregado a alpha2. Nota la 26,28
en la etiqueta. Los números de dos líneas separados por una coma representan un rango de números de línea. En este ejemplo, el rango es de la línea 26 a la 28. La etiqueta se interpreta como «en la línea 26 del primer archivo, agregue las líneas 26 a 28 del segundo archivo». Se nos muestran las tres líneas en alpha2 que deben agregarse a alpha1. Estos contienen las palabras Quirk, Strange y Charm.
Un delineador llamativo
Si todo lo que desea saber es si dos archivos son iguales, use el -s
(reportar archivos idénticos).
diff -s alpha1 alpha3
Puedes usar el -q
Opción (corta) para obtener una declaración igualmente concisa sobre dos archivos que son diferentes.
diff -q alpha1 alpha2
Una cosa a tener en cuenta es que con dos archivos idénticos, el-q
La opción (corta) se bloquea por completo y no aporta nada en absoluto.
Una vista alternativa
la -y
(lado a lado) utiliza un diseño diferente para describir las diferencias de archivo. A menudo es conveniente utilizar el -W
(ancho) con vista lado a lado, para limitar el número de columnas que se muestran. Esto evita las feas líneas de bucle que dificultan la lectura de la salida. Aquí dijimos diff
para producir una visualización lado a lado y limitar la salida a 70 columnas.
diff -y -W 70 alpha1 alpha2
El primer archivo de línea de comando, alpha1, se muestra a la izquierda y la segunda línea de la línea de comando, alpha2, se muestra a la derecha. Las líneas de cada archivo se muestran una al lado de la otra. Hay caracteres de bandera junto a estas líneas en alpha2 que se han cambiado, eliminado o agregado.
- |: Una línea que se ha modificado en el segundo archivo.
- <: Una línea que se ha eliminado del segundo archivo.
- >: Una línea que se agregó al segundo archivo que no está en el primer archivo.
Si prefiere un resumen en paralelo más compacto de las diferencias de archivos, utilice el --suppress-common-lines
opción. Esto fuerza diff
para enumerar solo las líneas modificadas, agregadas o eliminadas.
diff -y -W 70 --suppress-common-lines alpha1 alpha2
Añade un toque de color
Otra utilidad llamada colordiff
añade un toque de color a la diff
producción. Esto hace que sea mucho más fácil ver qué líneas tienen diferencias.
Utilizar apt-get
para instalar este paquete en su sistema si está utilizando Ubuntu u otra distribución basada en Debian. En otras distribuciones de Linux, utilice la herramienta de administración de paquetes de su distribución de Linux.
sudo apt-get install colordiff
Utilizar colordiff
tal como lo usarías diff
.
En realidad, colordiff
es un embalaje para diff
, y diff
hace todo el trabajo detrás de escena. Debido a esto, todos diff
las opciones funcionarán con colordiff
.
Proporcione algo de contexto
Para encontrar un equilibrio entre mostrar todas las líneas de los archivos en la pantalla y la lista de solo líneas modificadas, podemos preguntar diff
para proporcionar algo de contexto. Hay dos maneras de hacer esto. Ambas formas logran el mismo objetivo, que es mostrar algunas líneas antes y después de cada línea modificada. Podrás ver qué está sucediendo en el archivo donde se detectó la diferencia.
El primer método utiliza el -c
(contexto copiado).
colordiff -c alpha1 alpha2
la diff
la salida tiene un encabezado. El encabezado enumera los dos nombres de archivo y sus horas de modificación. Hay asteriscos (*
) antes del nombre del primer archivo y los guiones (-
) antes del nombre del segundo archivo. Se utilizarán asteriscos y guiones para indicar a qué archivo pertenecen las líneas de la salida.
Una línea de asteriscos con 1.7 en el medio indica que estamos viendo las líneas alfa1. Para ser precisos, estamos viendo las líneas 1 a 7. La palabra Delta está marcada como modificada. Tiene un signo de exclamación ( !
) junto a él, y es rojo. Se muestran tres líneas de texto sin cambios antes y después de esta línea para que podamos ver el contexto de esa línea en el archivo.
La línea discontinua con 1.7 en el medio nos dice que ahora estamos mirando las líneas alpha2. Nuevamente, estamos viendo las líneas uno a siete, con la palabra Dave en la línea cuatro marcada como diferente.
Tres líneas de contexto por encima y por debajo de cada cambio son las predeterminadas. Puede especificar cuántas líneas de contexto desea diff
para suministrar. Para hacer esto, use el -C
(contexto copiado) con una «C» mayúscula e indique el número de líneas que desea:
colordiff -C 2 alpha1 alpha2
La segunda diff
la opción que ofrece contexto es la -u
opción (contexto unificado).
colordiff -u alpha1 alpha2
Como antes, tenemos un encabezado en la salida. Ambos archivos se nombran y se muestran sus tiempos de modificación. Hay guiones (-
) antes del nombre alpha1 y los signos más (+
) antes del nombre alpha2. Esto nos dice que se usarán guiones para referirse a alpha1 y que se usarán signos más para referirse a alpha2. Dispersas a lo largo de la lista hay líneas que comienzan con signos (@
). Estas líneas marcan el inicio de cada diferencia. También nos dicen qué líneas se muestran de cada archivo.
Se nos muestran las tres líneas antes y después de la línea marcada como diferente para que podamos ver el contexto de la línea modificada. En la vista unificada, las líneas con la diferencia se muestran una encima de la otra. La línea para alpha1 está precedida por un guión y la línea para alpha2 está precedida por un signo más. Esta pantalla hace en ocho líneas lo que la pantalla emergente copiada anteriormente tomó quince para hacer.
Como puedes imaginar, podemos preguntar diff
para proporcionar exactamente el número de filas de contexto unificado que nos gustaría ver. Para hacer esto, use el -U
(contexto unificado) con una «U» mayúscula e indique el número de líneas que desea:
colordiff -U 2 alpha1 alpha2
Ignorar espacios en blanco y mayúsculas y minúsculas
Analicemos dos archivos más, test4 y test5. Estos llevan el nombre de seis superhéroes.
colordiff -y -W 70 test4 test5
Los resultados muestran que diff
No encuentres nada diferente con las líneas Black Widow, Spider-Man y Thor. Señala cambios con las líneas Capitán América, Ironman y Hulk.
Entonces, ¿qué es diferente? Bueno, en la Prueba 5, Hulk se escribe con una «h» minúscula y el Capitán América tiene un espacio adicional entre «Capitán» y «América». Está bien, eso está claro, pero ¿qué pasa con la línea Ironman? No hay diferencias visibles. Aquí tienes una buena regla general. Si no puede verlo, la respuesta es un espacio en blanco. Es casi seguro que haya un espacio o dos, o un carácter de tabulación, al final de esta línea.
Si no te importan, puedes preguntar diff
para ignorar tipos específicos de diferencia de filas, que incluyen:
- -I: Ignore las diferencias por si acaso.
- -Z: Ignora los espacios en blanco finales.
- -B: Ignora los cambios en la cantidad de espacio en blanco.
- -w: Ignora todos los cambios de espacios en blanco.
Pidamos a diff que revise estos dos archivos nuevamente, pero esta vez ignore cualquier diferencia por si acaso.
colordiff -i -y -W 70 test4 test5
Las líneas con «The Hulk» y «The Hulk» ahora se consideran una coincidencia, y no se informa ninguna diferencia para la «h» minúscula. Preguntar diff
para ignorar también los espacios en blanco finales.
colordiff -i -Z -y -W 70 test4 test5
Como uno sospecha, el espacio en blanco al final debe haber sido la diferencia en la línea Ironman porque diff
ya no informa una diferencia para esta línea. Eso deja al Capitán América. Preguntar diff
ignorar las mayúsculas y minúsculas e ignorar todos los problemas de espacios en blanco.
colordiff -i -w -y -W 70 test4 test5
Diciendo diff
ignorar las diferencias que no nos conciernen, diff
nos dice que, para nuestros propósitos, los archivos coinciden.
la diff
El comando tiene muchas más opciones, pero la mayoría de ellas se relacionan con la producción de resultados legibles por máquina. Estos se pueden ver en Linux página man. Las opciones que usamos en los ejemplos anteriores le permitirán detectar cualquier diferencia entre las versiones de sus archivos de texto, usando la línea de comando y los ojos humanos.