Linux : comment comparer 2 fichiers ou 2 dossiers avec la commande diff ?

Commandes et Système

Linux : comment comparer 2 fichiers ou 2 dossiers avec la commande diff ?

I. Présentation

Sous Linux, il existe une commande très simple et efficace pour comparer deux fichiers : diff. Dans ce tutoriel, nous allons apprendre à l’utiliser afin d’identifier la différence entre deux fichiers, ce qui peut s’avérer utile, par exemple, pour comparer 2 versions d’un script ou d’un fichier de configuration.

Si vous êtes prêts à découvrir quelques exemples d’utilisation de la commande “diff” sous Linux, vous n’avez plus qu’à lire la suite de cet article. Pour ma part, je vais utiliser une machine sous Ubuntu, mais cette commande fonctionne avec les autres distributions.

Version originale de l’article : 29 juillet 2014.

II. Syntaxe de la commande diff

Commençons par évoquer la syntaxe de la commande diff :


Cette commande retournera un résultat qu’il convient d’interpréter de la façon suivante :

  • Les lignes commençant par le symbole “<” se réfère au contenu du premier fichier
  • Les lignes commençant par le symbole “>” se réfère au contenu du deuxième fichier.
  • Les lettres indiquent comment le premier fichier doit être modifié pour correspondre au second fichier. La sortie peut afficher trois types d’état :
    • a : ajouter
    • c : modifier
    • d : supprimer

Si cela vous semble un peu flou pour le moment, pas de panique, vous allez mieux comprendre en effectuant un premier test de comparaison.

III. Utilisation de la commande diff

Tout d’abord, sachez que la commande diff peut comparer tous les fichiers textes, que ce soit des fichiers de configuration, des scripts Bash, ou encore de simples fichiers textes. Du moment que le contenu est accessible “en clair” en mode texte, l’outil sera capable d’effectuer la comparaison.

Remarque : vous ne pouvez pas comparer 3 fichiers (ou plus) avec la commande diff.

A. Prise en main de diff

Commencez par créer un fichier nommé “fichier1.txt” avec le contenu suivant :


Puis, créez un fichier nommé “fichier2.txt” avec le contenu suivant :


La différence entre ces deux fichiers se situe sur la dernière ligne.

Pour comparer ces deux fichiers, utilisez cette commande :


Le résultat suivant est retourné :


Effectuons un décryptage ligne par ligne :

  • 4c4 :

Cela signifie qu’il y a une modification (“c” pour “change“) à la ligne 4 dans les deux fichiers. La ligne 4 de fichier1.txt a été changée et est différente de la ligne 4 de fichier2.txt.

  • < www.it-connect.fr :

Le symbole “<” indique le contenu présent dans fichier1.txt, mais qui ne l’est pas dans le fichier2.txt. Donc, la ligne 4 dans fichier1.txt contient “www.it-connect.fr“.

  • :

Cette ligne sépare les différences entre les deux fichiers.

Le symbole “>” indique le contenu correspondant dans fichier2.txt, mais qui n’est pas présent dans fichier1.txt. Donc, la ligne 4 dans fichier2.txt contient “Démo Tuto Linux“.

En résumé, nous obtenons ce qui suit :

Exemple utilisation commande diff sur LinuxExemple utilisation commande diff sur Linux

B. Que se passe-t-il avec des fichiers identiques ?

Lorsque nous effectuons une comparaison avec diff et que les deux fichiers sont identiques, il n’y a aucun retour dans la console ! Enfin, disons que c’est le comportement par défaut de la commande. Si nous ajoutons l’option “-s”, il y a un message qui indique clairement que ces 2 fichiers sont identiques.


Nous obtenons le résultat suivant :


Comparer 2 fichiers identiques avec diff sur LinuxComparer 2 fichiers identiques avec diff sur Linux

C. La commande diff et la casse

Par défaut, la commande diff tient compte de la casse, c’est-à-dire qu’elle va considérer que deux fichiers sont différents, s’il s’agit d’une différence liée aux minuscules et majuscules. Pour ne pas tenir compte de la casse, il est nécessaire d’utiliser l’option “-i“. Voici un exemple :


Ce qui donne :

Commande diff - Ne pas tenir compte de la casseCommande diff - Ne pas tenir compte de la casse

D. Ne pas tenir compte des sauts de ligne

Par défaut, la commande diff est particulièrement sensible, puisqu’elle prend en considération la casse, ainsi que les sauts de ligne (lignes vides). Pour éviter que les sauts de lignes vides soient considérées comme des différences, nous pouvons utiliser l’option “-B“, comme suivant :


L’image ci-dessous montre bien la différence dans le résultat, en fonction de l’utilisation de l’option “-B“. Bien entendu, vous pouvez cumuler ces différentes options.

Commande diff - Ne pas tenir compte des sauts de ligneCommande diff - Ne pas tenir compte des sauts de ligne

E. Changer le mode d’affichage

La commande diff prend en charge plusieurs modes d’affichage qui auront un impact sur le formatage du résultat dans la console. L’option “-c” permet de préciser les différences d’une façon plus précise grâce à un symbole devant les lignes concernées.

Il suffit de spécifier l’option de cette façon :


Avec le fichier1.txt ayant ce contenu :


Et, le fichier2.txt avec ce contenu :


Nous obtenons ce résultat :


Voici ce que vous devez savoir :

  • Les deux premières lignes indiquent l’horodatage des deux fichiers comparés.
  • La ligne “*** 1,5 ****” indique la plage de lignes analysées (de la ligne 1 à la ligne 5)

Il y a ensuite un symbole devant les lignes qui représentent une différence entre les deux fichiers :

  • Symbole “” : la ligne doit être supprimée du premier fichier.
  • Symbole “+” : la ligne doit être ajoutée au premier fichier.
  • Symbole “!” : la ligne doit être remplacée par la ligne correspondante du deuxième fichier.

Par exemple, cela signifie que la ligne “# Démo” doit être ajoutée au premier fichier, pour qu’il y ait une correspondance exacte. Ceci s’explique par la présence du caractère “+” : “+ # Démo“.

Voici l’exemple complet en image :

Pour avoir une sortie plus compacte et qui suit la même logique, vous pouvez utiliser l’option “-u” :


F. Comparer 2 dossiers avec diff

Au-delà de comparer 2 fichiers avec diff, vous pouvez aussi comparer le contenu de 2 dossiers. Ainsi, vous pouvez identifier les fichiers et les dossiers présents dans le répertoire 1, mais pas dans le répertoire 2, et inversement. Pour cela, il suffit d’utiliser l’option “-q“.


Voici l’exemple complet :

Comparer 2 dossiers avec diff sous LinuxComparer 2 dossiers avec diff sous Linux

IV. Conclusion

Suite à la lecture de ce tutoriel, vous savez comment utiliser la commande diff sous Linux, que ce soit pour comparer le contenu de 2 fichiers ou de 2 répertoires ! Si vous souhaitez en savoir encore plus, consultez l’aide de cette commande :


SOURCE