9 ejemplos de comandos diff en Linux

El comando Diff en Linux se usa para comparar el contenido de dos archivos línea por línea y, si se encuentra la diferencia, también enumerará las diferencias junto con los números de línea. El comando Diff también se puede usar para comparar el contenido de dos directorios.

El comando Diff juega un papel importante en el script de shell donde queremos ejecutar el comando en función de la diferencia de dos archivos.

sintaxis del comando diff

$ diff archivo1 archivo2

La salida del comando diff puede tener el siguiente formato:

  • Normal (predeterminado)
  • Contexto
  • unificado

Diferentes símbolos de la salida del comando diff:

  • a -> indica que se ha añadido algo
  • c -> indica que se ha cambiado algún texto
  • d -> indica que se ha eliminado algún texto

De forma predeterminada, el comando diff muestra la salida en formato normal, lo que significa que cuando el contenido de dos archivos es idéntico, no producirá ninguna salida, pero obtendremos el aviso.

En esta publicación, discutiremos el comando diff con ejemplos prácticos.

1) Compara dos archivos con el comando diff

Supongamos que tenemos dos archivos. aquisgrán.txt y sydney.txt y lo siguiente es el contenido de estos archivos,

[[email protected] ~]# cat aachen.txt
Linux Rocks in the open source world, followings are the linux distributions:
CentOS
Red Hat
Ubuntu Debian
Linux Mint
OpenSUSE
Fedora
[[email protected] ~]# cat sydney.txt
Linux Rocks in the open source world, followings are the linux distributions:
CentOS
Red Hat
Ubuntu Debian
Linux Mint
OpenSUSE
Fedora
[[email protected] ~]#

Comparemos el contenido de estos archivos usando el comando diff,

[[email protected] ~]# diff aachen.txt sydney.txt
[[email protected] ~]#

La salida anterior confirma que ambos archivos son idénticos. Hagamos algunos cambios en aachen.txt, reescribamos código abierto como «código abierto».

Ahora vuelva a ejecutar el comando diff,

[[email protected] ~]# diff aachen.txt sydney.txt

Producción,

Cambio-diff-comando-salida

En la salida, 1c1 indica que se debe cambiar la primera línea del primer archivo para que ambos archivos sean idénticos.

Retrocedamos el cambio anterior y agreguemos una nueva línea «arco linux” en sydeny.txt al final del archivo y ejecute el comando diff nuevamente,

agregar-diff-comando-salida

Salida del comando diff “7a8” indica que después de la línea 7 en el primer archivo, necesitamos agregar otra línea para que coincida con la línea 8 del segundo archivo.

Eliminemos «Arch Linux» y «Fedora» de sydney.txt y luego intentemos comparar estos archivos,

borrar-texto-diff-comando-salida

Salida del comando diff “7d6” indica que necesitamos eliminar la séptima línea en el primer archivo para sincronizar con el segundo archivo en la línea número 6.

2) Salida del comando Diff en formato de contexto (-c)

Use la opción ‘-c’ en el comando diff para producir la salida del comando diff en formato de contexto. El ejemplo se muestra a continuación,

[[email protected] ~]# diff -c aachen.txt sydney.txt

diff-comando-salida-contexto-formato

Las dos primeras líneas representan nombres de archivo junto con su fecha y hora de modificación y tres símbolos de asterisco («***“) indica el primer archivo y el símbolo de tres guiones (““) indica el segundo archivo.

Solo un guión simple «-» indica que la línea debe eliminarse y el símbolo más «+» indica que la línea debe agregarse en el archivo. Si hay alguna línea que no requiere ningún cambio, entonces tiene dos espacios como prefijo.

3) Salida del comando Diff en formato unificado (-u)

Use la opción ‘-u’ en el comando diff si desea producir su salida en formato unificado, el ejemplo se ilustra a continuación,

[[email protected] ~]# diff -u aachen.txt sydney.txt

diff-comando-salida-formato-unificado

La salida anterior es algo similar al formato de contexto, pero el formato unificado muestra la salida de manera concisa, aquí las dos primeras líneas indican los nombres de archivo junto con su fecha y hora de modificación.

Tres guiones («-«) representan el primer archivo y tres símbolos más («+++») representan el segundo archivo, después de dos @ el signo «-1,7» indica las líneas del primer archivo y «+1,7» representa las líneas van desde el segundo archivo. Además, el símbolo (+Core OS) indica que esta línea debe agregarse en el primer archivo y el símbolo de guión (-Fedora) indica que esta línea debe eliminarse del primer archivo para que sea idéntica al segundo archivo.

4) Ignorar mayúsculas y minúsculas al comparar archivos (-i)

De forma predeterminada, el comando diff distingue entre mayúsculas y minúsculas y si desea ignorar mayúsculas y minúsculas en el comando diff, use la opción ‘-i’, el ejemplo se muestra a continuación,

Supongamos que tenemos el siguiente contenido de dos archivos

Contenido-dos-archivos

Ejecute el comando diff sin ninguna opción,

[[email protected] ~]# diff aachen.txt sydney.txt
5,6c5,6
< Ubuntu debian
< Linux mint
---
> Ubuntu Debian
> Linux Mint
[[email protected] ~]#

Ahora ejecute el comando diff con la opción -i,

[[email protected] ~]# diff -i aachen.txt sydney.txt
[[email protected] ~]#

Como podemos ver en el resultado anterior, el comando diff ha ignorado la característica de distinción entre mayúsculas y minúsculas cuando usamos la opción -i.

5) Los archivos de informe son idénticos al comando diff (-s)

Puede haber algunas situaciones en las que estemos comparando los archivos usando el comando diff y si el contenido es idéntico, entonces queremos mostrar el mensaje de que el archivo es idéntico, esto se puede lograr pasando la opción ‘-s’ en el comando diff,

[[email protected] ~]# cat filex.txt
DevOPs Engineer
Cloud Stack Engineer
Linux System Admin
Monitoring Team
[[email protected] ~]# cat filey.txt
DevOPs Engineer
Cloud Stack Engineer
Linux System Admin
Monitoring Team
[[email protected] ~]# diff -s filex.txt filey.txt
Files filex.txt and filey.txt are identical
[[email protected] ~]#

6) Ignorar los espacios en blanco al comparar archivos con diff (-b)

Supongamos que tenemos dos archivos. archivoa.txt y archivob.txt donde los espacios en blanco no son consistentes, por lo que si usamos el comando diff sin ninguna opción, mostrará la diferencia de espacios en blanco aunque los contenidos sean idénticos, por lo que en tales casos podemos ignorar los espacios en blanco inconsistentes en el comando diff usando la opción -b, ejemplo se muestra a continuación,

[[email protected] ~]# cat filea.txt
Hi,  LinuxTechi is a Linux based  blog. It contains linux  HowTo's  and  Tips  &  Tricks.
[[email protected] ~]# cat fileb.txt
Hi, LinuxTechi is a Linux based blog. It contains linux HowTo's and Tips & Tricks.
[[email protected] ~]#

Compare los archivos sin ninguna opción con el comando diff,

[[email protected] ~]# diff filea.txt fileb.txt
1c1
< Hi,  LinuxTechi is a Linux based  blog. It contains linux  HowTo's  and  Tips  &  Tricks.
---
> Hi, LinuxTechi is a Linux based blog. It contains linux HowTo's and Tips & Tricks.
[[email protected] ~]#

Ahora use la opción -b en el comando diff anterior

[[email protected] ~]# diff -b filea.txt fileb.txt
[[email protected] ~]#

Si desea ignorar todos los espacios en blanco durante la comparación con el comando diff, utilice «-w» opción

[[email protected] ~]# diff -w filea.txt fileb.txt

7) Ignorar el espacio en blanco al final de la línea durante la comparación (-Z)

Si desea ignorar el espacio de prueba al final de la línea durante la comparación, utilice «-Z» opción

[[email protected] ~]# diff -Z filea.txt fileb.txt

Usar «-B” en el comando diff para ignorar todas las líneas en blanco durante la comparación,

[[email protected] ~]# diff -B filea.txt fileb.txt

8) Compara dos directorios

Supongamos que tenemos dos directorios con el nombre lab01 y lab02, estos tienen los siguientes archivos y subdirectorios

[[email protected] ~]# ls -l lab01/
total 0
-rw-r--r--. 1 root root  0 Feb  1 17:49 filea.txt
-rw-r--r--. 1 root root  0 Feb  1 17:49 fileb.txt
-rw-r--r--. 1 root root  0 Feb  1 17:49 filec.txt
-rw-r--r--. 1 root root  0 Feb  1 17:49 filed.txt
drwxr-xr-x. 2 root root 23 Feb  1 17:50 sitea
[[email protected] ~]# ls -l lab02/
total 0
-rw-r--r--. 1 root root  0 Feb  1 17:49 filea.txt
-rw-r--r--. 1 root root  0 Feb  1 17:49 fileb.txt
-rw-r--r--. 1 root root  0 Feb  1 17:49 filec.txt
-rw-r--r--. 1 root root  0 Feb  1 17:49 filed.txt
drwxr-xr-x. 2 root root 23 Feb  1 17:50 sitea
[[email protected] ~]#

Comparemos estos dos directorios usando el siguiente comando diff,

[[email protected] ~]# diff -qr lab01/ lab02/
[[email protected] ~]#

Donde:

  • -q -> indica al comando diff que informe solo cuando los archivos son diferentes
  • -r -> indica al comando diff que busque la diferencia en los subdirectorios de forma recursiva

Como obtenemos una salida en blanco, significa que ambos directorios son idénticos. Eliminemos archivado.txt de lab02 y luego intentemos comparar,

[[email protected] ~]# cd lab02/
[[email protected] lab02]# rm -f filed.txt
[[email protected] lab02]# cd
[[email protected] ~]# diff -qr lab01/ lab02/
Only in lab01/: filed.txt
[[email protected] ~]#

La salida anterior dice que archivado.txt solo está presente en el directorio lab01

9) Redirigir la salida del comando diff a un archivo

La salida del comando Diff se puede redirigir a un archivo usando el símbolo «>». Se vuelve muy útil en scripts de shell donde queremos realizar una tarea solo si la salida del comando diff contiene diferencias.

[[email protected] ~]# diff aachen.txt sydney.txt
9,10d8
< SLES
< Puppy Linux
[[email protected] ~]# diff aachen.txt sydney.txt  > diff.txt
[[email protected] ~]# cat diff.txt
9,10d8
< SLES
< Puppy Linux
[[email protected] ~]#

Ejemplo adicional

Compara dos archivos en la terminal uno al lado del otro

Cuando usamos la opción ‘-y’ mientras comparamos dos archivos usando el comando diff, muestra ambos archivos en la terminal uno al lado del otro.

[[email protected] ~]# diff -y /etc/fstab /tmp/fstab

producción

Comparar-dos-archivos-linux-diff-command

La salida anterior muestra claramente la diferencia de dos archivos.

Eso es todo de este artículo, espero que ahora tenga una mejor comprensión del comando diff al revisar los ejemplos anteriores. Por favor, no dude en compartir sus comentarios y opiniones.

Leer también : 16 ejemplos de comandos de eco en Linux

Leer también : 8 ejemplos de comandos de cabeza en Linux

Entradas relacionadas

Deja una respuesta

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