En este momento estás viendo Comparar ficheros y directorios con diff y con meld

Comparar ficheros y directorios con diff y con meld

Comparar ficheros y directorios con diff y con meld

En el uso de nuestros sistemas Linux, comparar ficheros y directorios es una necesidad bastante habitual, en especial para los desarrolladores, cuando tenemos que comparar versiones de scripts, por ejemplo. Para ello, en linux disponemos del comando diff, que busca y muestra las diferencias de caracteres, líneas, tamaño, etc… El comando diff opera en terminal, pero también tenemos la herramienta Meld, que nos ofrece lo mismo pero con una interfaz gráfica. Vamos a ver un uso básico de diff y como instalar y usar Meld.

Sumario

  • El comando diff
    • Ficheros
    • Directorios
  • Meld
    • Instalación de meld
    • Comparar archivos y carpetas con meld

El comando diff

Este comando lo podemos utilizar para comparar ficheros o directorios en la terminal.

Ficheros

El comando diff realiza comparaciones y muestra las diferencias entre ficheros línea a línea. Esto nos resultará muy útil cuando queramos comprobar las diferencias entre ficheros, por ejemplo entre dos versiones de un script o entre ficheros de configuración.

La sintaxis del comando es:

diff fichero1 fichero2

Sin opciones el comando compara las diferencias entre las lineas de los dos ficheros y nos mostrará las líneas que tenemos que cambiar para que los dos ficheros sean iguales.

Nos mostrará el siguiente resultado:

  • Los números de línea correspondientes al primer fichero y una coma entre los números, para indicar un rango de líneas.
  • Una letra [«a» (add) para añadir, «c» (change) para cambiar, «d» (delete) para borrar] y «—» para separar las líneas del primer fichero y del segundo.
  • Los números de línea correspondientes al segundo fichero
  • Los símbolos especiales que indican las diferencias en los ficheros:
    • < son líneas del primer fichero
    • > son líneas del segundo fichero

Vamos a verlo con unos ejemplos.

Tenemos el fichero «fichero1», con el contenido:

Esta es la linea 1
Y esta la linea 2
La linea tres es igual
Esta es la linea final

y el fichero «fichero2», con el contenido:

Esta es la linea 1
Y esta la linea 2
La linea tres es igual
Esta es la cuarta linea 

La única diferencia está en la última línea, la línea número 4. Al ejecutar el comando con los dos ficheros como argumentos, el resultado es:

diff fichero1 fichero2
Comparación de ficheros
4c4
< Esta es la linea final
---
> Esta es la cuarta linea

La salida del comando nos indica:

Que en el primer fichero tenemos que cambiar «c» la linea 4 (< Esta es la linea final) por la línea 4 del segundo fichero y nos muestra el contenido de la linea 4 del segundo fichero (> Esta es la cuarta linea).

Veámoslo con un ejemplo más complejo. Tenemos «fichero3» con el siguiente contenido:

Esta es la linea 1
Y esta la linea 2
Ponemos una en medio
Otra más
La linea tres es igual
Y otra más
Esta es la linea final
Esta es la última

Y «fichero1»

Esta es la linea 1
Y esta la linea 2
La linea tres es igual
Esta es la linea final

Ejecutamos el comando

diff fichero3 fichero1

Analizamos la salida de diff:

3,4d2
< Ponemos una en medio
< Otra más
6d3
< Y otra más
8d4
< Esta es la última

Veamos…

3,4d2
< Ponemos una en medio
< Otra más

De la línea 3 a la 4 del primer fichero (3,4), tenemos que BORRAR (d),

  • < Ponemos una en medio
  • < Otra más

para que en la línea 2 del segundo fichero, ambos sean IGUALES.

Estas lineas, pertenecientes al primer fichero «fichero3» (por el símbolo < ) son las que hay que BORRAR:

Continuando con la salida del comando:

6d3
< Y otra más
8d4

De la línea 6 a la 8 del primer fichero (6,8), tenemos que BORRAR (d),

  • < Y otra más

para que en la línea 4 del segundo fichero, ambos sean IGUALES.

Estas lineas, pertenecientes al primer fichero «fichero3» (por el símbolo < ), es lo que hay que BORRAR

8d4
< Esta es la última

Y tenemos que borrar la linea 8 del primer fichero, para que sea igual al segundo.

Tenemos otra opción que te resultara más clara y es con la opción «-y». Nos mostrará los dos ficheros en dos columnas.

diff -y fichero1 fichero3
Resultado en columnas

Directorios

Con el comando diff también podemos hacer comparaciones del contenido de directorios y subdirectorios, de forma recursiva.

Con las opciones «-rq», realizará lo siguiente:

  • -r :recursivo
  • -q: muestra por pantalla solo cuando hay diferencias
ls -la directorio1/ directorio2/
diff -rq directorio1/ directorio2/

Hay muchas más opciones para este comando. Consulta el manual en la terminal con

man diff

Meld

Meld es una interfaz gráfica del comando diff, considerada por la comunidad Linux como una de las mejores herramientas para realizar comparaciones entre ficheros, directorios e incluso proyectos de control de versiones. Es de uso generalizado por todo tipo de usuarios y por desarrolladores de aplicaciones para verificar sus trabajos. Las principales características de este software son:

  • Ofrece una exhaustiva comparación de ficheros/directorios (bidireccional y tridireccional).
  • Tiene capacidad de combinar ficheros y directorios, gracias a la función Auto Merge.
  • Permite el resaltado de sintaxis y la administración de archivo.
  • Tiene una interfaz gráfica sencilla .
  • Proporciona soporte para sistemas de control de versiones (Git, Mercurial, Bazaar y SVN).
  • Soporta la integración con herramientas en línea de comandos (git y mergetool).

Vamos a ver como instalar Meld y un sencillo ejemplo de uso.

Instalación de meld

Los requisitos para el uso de la herramienta son comunes en cualquier distribución actual. Python 3.x, GTK 3.x, etc.

Según nuestro sistema elegimos el comando de instalación de la herramienta.

Para Debian, Ubuntu, Mint y derivados:

Sudo apt-get install meld

Para Fedora, CentOS, Alma Linux y derivados:

sudo dnf install meld
o
sudo yum install meld

Para Arch Linux, Manjaro y derivados:

sudo pacman -S meld

Para SUSE, OpenSUSE y derivados:

sudo zypper install meld
Instalación de Meld

Comparar archivos y carpetas con meld

Para realizar la comparativa, tomamos un fichero con especificaciones de un monitor. Hacemos una copia y añadimos lineas y borramos otras en los dos ficheros. Luego usando meld, compararemos los dos ficheros. Es una tarea muy sencilla.

Lanzamos el programa desde el menú de aplicaciones del entorno de escritorio. Nos aparece una ventana interactiva, en la que elegimos el primer fichero (principal). Una vez seleccionado, pulsa en «Comparar».

Interfaz de meld

Se abre la herramienta con dos ventanas, en las cuales se compararan los archivos. Seleccionamos el segundo fichero,

Comparación con meld

Como vemos en la captura anterior, nos marca las diferencias con colores. Con el color verde nos resalta las lineas que faltan en el otro fichero y en este caso, en azul las lineas las lineas que faltan en los dos. Podemos ver que las lineas diferentes, además del color, tienen unas flechas que si pulsamos sobre ellas, la zona marcada se clonará al otro fichero. Lo hacemos con la linea 7 del primer fichero.

Clonamos linea 7

Y con la ultima linea del segundo fichero, cambia la del primero.

Si exploras los menús de la barra superior, veras la cantidad de posibilidades de configuración de la herramienta, como cambiar el esquema de color para el resaltado de sintaxis, mostrar el número de linea, comparación de directorios, gestionar el control de versiones, aplicar filtros y añadir o quitar puntos de sincronización.

Como ves, es una excelente herramienta que seguro te vendrá muy bien conocer.

Si tienes algún comentario que hacer, al pie del post tienes un formulario para hacerlo.

Y si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, o te quieres suscribir para recibir un correo-e una vez al mes con las nuevas publicaciones, en la página de contacto , tienes otro formulario.

Esta entrada tiene 2 comentarios

  1. Barto

    Interesante artículo Javier

Deja una respuesta

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