Linux

Linux : ¿cómo puedo comparar 2 archivos o 2 carpetas con el comando diff?

I. Introducción

En Linux, existe un comando muy simple y efectivo para comparar dos archivos: diff. En este tutorial, aprenderemos a usarlo para identificar la diferencia entre dos archivos, lo que puede ser útil, por ejemplo, al comparar 2 versiones de un script o archivo de configuración.

Si estás listo para descubrir algunos ejemplos de cómo usar el comando "diff" en Linux, sigue leyendo. Por mi parte, voy a utilizar una máquina que ejecuta Ubuntu, pero este comando funciona con otras distribuciones.

II. sintaxis del comando diff

Empecemos con la sintaxis del comando diff:

diff archivo1 archivo2 [options]

Este comando devolverá un resultado que debe interpretarse como sigue:

  • Las líneas que comienzan con el símbolo "<" se refieren al contenido del primer
  • Las líneas que comienzan con el símbolo ">" se refieren al contenido del segundo fichero.
  • Las letras indican cómo debe modificarse el primer fichero para que coincida con el segundo. La salida puede mostrar tres tipos de estado:
    • a: añadir
    • c: editar
    • d: suprimir

Si esto le parece un poco vago en este momento, no se asuste, lo entenderá mejor cuando realice una primera prueba comparativa.

III. Uso del comando diff

En primer lugar, debes saber que el comando diff puede comparar cualquier archivo de texto, ya sean archivos de configuración, scripts Bash o simples archivos de texto. Siempre que el contenido sea accesible en modo texto plano, la herramienta podrá realizar la comparación.

Nota : no se pueden comparar 3 ficheros (o más) con el comando diff.

A. Primeros pasos con diff

Comience creando un archivo llamado "archivo1.txt" con el siguiente contenido:

##########
IT-Connect
##########
www.it-connect.fr

A continuación, cree un archivo llamado "archivo2.txt" con el siguiente contenido:

##########
IT-Connect
##########
> Démo Tuto Linux

La diferencia entre estos dos archivos está en la última línea.

Para comparar estos dos archivos, utilice este comando:

diff archivo1.txt archivo2.txt

Se devuelve el siguiente resultado:

4c4
< www.it-connect.fr
---
> > Démo Tuto Linux

Descifrémoslo línea por línea:

  • 4c4 :

Esto significa que hay un cambio ("c" por "cambio") en la línea 4 de ambos archivos. La línea 4 del archivo1.txt ha cambiado y es diferente de la línea 4 del archivo2.txt.

  • < www.it-connect.fr :

El símbolo "<"indica contenido presente en archivo1.txt, pero no presente en archivo2.txt. Así, la línea 4 de archivo1.txt contiene "www.it-connect.fr".

  • --- :

Esta línea separa las diferencias entre los dos ficheros.

  • > > Tutorial de demostración de Linux:

El símbolo ">"indica el contenido correspondiente en archivo2.txt, pero que no está presente en archivo1.txt. Así, la línea 4 de archivo2.txt contiene "Linux tutorial demo".

En resumen, obtenemos lo siguiente:

Ejemplo de uso del comando diff en Linux

B. ¿Qué ocurre con los archivos idénticos?

Cuando realizamos una comparación con diff y los dos ficheros son idénticos, ¡no hay retorno a la consola ! Digamos que este es el comportamiento por defecto del comando. Si añadimos la opción "-s", aparece un mensaje indicando claramente que estos 2 ficheros son idénticos.

diff archivo1.txt archivo2.txt -s

Obtenemos el siguiente resultado:

The files archivo1.txt and archivo2.txt are identical.
Comparar 2 archivos idénticos con diff en Linux

C. El comando diff y el caso

Por defecto, el comando diff distingue entre mayúsculas y minúsculas, es decir, considerará que dos archivos son diferentes si distinguen entre mayúsculas y minúsculas. Para no tener en cuenta mayúsculas y minúsculas, utilice la opción "-i". He aquí un ejemplo:

diff archivo1.txt archivo2.txt -i
# o
diff archivo1.txt archivo2.txt -is

Lo que da:

Comando diff - No distingue mayúsculas de minúsculas

D. No tener en cuenta los saltos de línea

Por defecto, el comando diff es especialmente sensible, ya que tiene en cuenta mayúsculas y minúsculas y los saltos de línea (líneas vacías). Para evitar que los saltos de línea vacíos se consideren diferencias, podemos utilizar la opción "-B ", como se indica a continuación:

diff archivo1.txt archivo2.txt -B

La imagen siguiente muestra la diferencia en los resultados, dependiendo del uso de la opción "-B ". Por supuesto, puede combinar estas distintas opciones.

Comando diff - Ignorar saltos de línea

E. Cambiar el modo de visualización

El comando diff admite varios modos de visualización que repercutirán en el formato del resultado en la consola. La opción "-c" permite especificar las diferencias con mayor precisión colocando un símbolo delante de las líneas en cuestión.

Basta con especificar la opción de la siguiente manera:

diff archivo1.txt archivo2.txt -c

Con archivo1.txt con este contenido :

##########
IT-Connect
##########
Rendez-vous sur IT-Connect :
www.it-connect.fr

Y, el archivo2.txt con este contenido :

# Démo
##########
IT-Connect
##########
# Tuto
# Linux

Obtenemos este resultado:

*** archivo1.txt	2025-01-16 16:18:32.817171261 +0100
--- archivo2.txt	2025-01-16 16:19:44.665177050 +0100
***************
*** 1,5 ****
  ##########
  IT-Connect
  ##########
! Rendez-vous sur IT-Connect :
! www.it-connect.fr
--- 1,6 ----
+ # Démo
  ##########
  IT-Connect
  ##########
! # Tuto
! # Linux

Esto es lo que debe saber:

  • Las dos primeras líneas indican la fecha y horade los dos archivos comparados.
  • La línea "*** 1,5 ****" indica el intervalo de líneas analizadas (de la línea 1 a la línea 5).

Luego hay un símbolo delante de las líneas que representan una diferencia entre los dos ficheros:

  • Símbolo"-": la línea debe borrarse del primer archivo.
  • Símbolo "+": la línea debe añadirse al primer archivo.
  • Símbolo "!": la línea debe sustituirse por la línea correspondiente del segundo archivo.

Por ejemplo, esto significa que la línea"# Demo" debe añadirse al primer archivo para que haya una coincidencia exacta. Esto se explica por la presencia del carácter "+ ": "+ # Demo".

Aquí está el ejemplo completo en imágenes:

Para obtener una salida más compacta que siga la misma lógica, puede utilizar la opción "-u":

diff archivo1.txt archivo2.txt -u

F. Comparar 2 archivos con diff

Además de comparar 2 archivos con diff, también puede comparar el contenido de 2 carpetas. Así, puede identificar archivos y carpetas presentes en el directorio 1, pero no en el directorio 2, y viceversa. Para ello, basta con utilizar la opción "-q".

diff doc1/ doc2/ -q
Seulement dans doc1/: archivo2.txt
Seulement dans doc1/: archivo3.txt
Seulement dans doc2/: archivo5.txt

Aquí está el ejemplo completo:

Comparar 2 carpetas con diff en Linux

IV. Conclusión

Después de leer este tutorial, sabrás cómo utilizar el comando diff en Linux, ¡ya sea para comparar el contenido de 2 archivos o de 2 directorios! Si quieres saber aún más, echa un vistazo a la ayuda de este comando:

diff --help
author avatar
Florian Burnel Co-founder of IT-Connect
Systems and network engineer, co-founder of IT-Connect and Microsoft MVP "Cloud and Datacenter Management". I'd like to share my experience and discoveries through my articles. I'm a generalist with a particular interest in Microsoft solutions and scripting. Enjoy your reading.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.