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
Opciones
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
Ejemplos
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
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
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
Si utilizas 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
Comparar ficheros y directorios 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 la herramienta
Se abre la herramienta con dos ventanas, en las cuales se compararan los archivos. Seleccionamos el segundo fichero,
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.
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 sobre este artículo, al pie del post tienes un formulario para hacerlo.
Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.
Y para suscribirte y recibir las novedades publicadas, tienes un enlace en el pie de la página o desde aquí mismo.
Me sirvio, muchas gracias
Interesante artículo Javier
Gracias por tu comentario