En ce qui concerne la comparaison de fichiers, les logiciels basés sur l'interface graphique sont principalement utilisés. Si vous êtes un utilisateur Linux, je pense que vous devriez savoir comment comparer deux fichiers via la ligne de commande car c'est certainement une méthode rapide une fois que vous y êtes habitué.
Dans ce tutoriel, nous allons apprendre à utiliser la commande diff à travers quelques exemples pratiques.
Commande diff Linux
Comprenons la commande Linux diff à travers quelques exemples pratiques.
Supposons que nous ayons ces deux fichiers (fichier1 et fichier2) :
$ cat file1
Hi,
Hello,
How are you?
I am fine,
Thank you.
$ cat file2
Hello,
Hi,
How are you?
I am fine.
Vous pouvez voir que les deux fichiers ont quelques différences mineures. Voyons maintenant comment la commande diff peut être utilisée pour faire ressortir ces différences.
Voici comment exécuter la commande diff :
$ diff file1 file2
1d0
< Hi, 2a2 > Hi,
4,5c4
< I am fine,
< Thank you.
---
> I am fine.
Vous pouvez donc voir que la commande diff a été fournie avec les noms de fichiers en tant qu'arguments de ligne de commande et qu'elle a produit les différences dans la sortie. La sortie n'est en aucun cas facilement compréhensible. La raison en est qu'il a été conçu pour être utilisé par des ordinateurs et non par des humains. Néanmoins, décodons la sortie morceau par morceau :
REMARQUE - Les fichiers fichier1 et fichier2 seront adressés comme ancien fichier et nouveau fichier dans le texte suivant.
1d0
< Hi,
Ici, la ligne 1d0 signifie que la 1ère ligne de l'ancien fichier doit être supprimée (d) afin de synchroniser les deux fichiers à partir de la ligne 0. La ligne à supprimer dans l'ancien fichier est mentionnée juste en dessous avec
Ici, la ligne 2a2 signifie que la deuxième ligne du nouveau fichier doit être ajoutée après la deuxième ligne de l'ancien fichier. La ligne à ajouter est affichée dans la ligne suivante de la sortie avec la marque>.
Ici, la ligne 4,5c4 signifie que les numéros de ligne allant de 4 à 5 dans l'ancien fichier sont maintenant modifiés et doivent être remplacés par la 4ème ligne du nouveau fichier. Les lignes à ajouter et à supprimer sont marquées respectivement par> et <.
Donc, pour conclure,
En plus des fichiers, la commande diff peut également être utilisée pour comparer deux répertoires. Apprenons cela à travers un exemple.
Voici le contenu d'un répertoire nommé 'new_dir' :
et voici le contenu d'un répertoire nommé 'old_dir' :
Maintenant, voici la sortie lorsque la commande diff a été exécutée :
Ainsi, vous pouvez voir que lorsque la commande diff est exécutée pour comparer ces deux répertoires, elle affiche facilement les fichiers manquants dans les répertoires.
Voici quelques-unes des options de ligne de commande couramment utilisées :
Si deux fichiers contiennent le même texte mais dans des cas différents, la commande diff le signale toujours comme une différence par défaut.
Par exemple :
Vous pouvez donc voir que la commande diff a signalé la différence de casse dans la sortie.
Pour vous en sortir avec ce comportement par défaut, utilisez l'option -i.
Voici un exemple :
Ainsi, vous pouvez voir qu'aucune sortie n'a été produite, ce qui est le comportement par défaut lorsque les deux fichiers sont identiques.
Vers la fin de l'exemple 1, nous avons vu que diff ne signale rien si les fichiers sont identiques. Bien que ce comportement par défaut soit correct, il pourrait encore en dérouter beaucoup, en particulier les débutants. Donc, si vous voulez que la commande diff signale explicitement que les fichiers sont identiques, utilisez l'option de ligne de commande -s.
Voici un exemple :
Vous pouvez donc voir que j'ai ajouté l'option -s dans la commande que nous avons utilisée dans le dernier exemple et cette fois la commande diff a signalé explicitement que les deux fichiers sont identiques.
Un autre cas d'utilisation courant est le nombre variable d'espaces pour lesquels la commande diff signale que les fichiers sont différents.
Voici un exemple :
Observez que la seule différence entre les fichiers de remorquage est l'espace supplémentaire entre les mots « êtes » et « vous » dans le fichier2. Maintenant, lorsque la commande diff est utilisée pour comparer ces deux fichiers, voici le résultat :
Vous pouvez donc voir que la commande diff a signalé la différence. Mais si vous voulez que diff ignore ces espaces, utilisez l'option -b :
Vous pouvez donc voir qu'en raison de l'option -b, la commande diff a signalé que les deux fichiers étaient identiques.
Astuce de commande :
La commande ci-dessous affichera toutes les différences de fichiers entre deux dossiers
La commande diff fournit de nombreuses autres options de ligne de commande. Lisez sa page de manuel pour la liste complète.2a2
> Hi,
4,5c4
< I am fine,
< Thank you.
---
> I am fine.
$ ls new_dir/
file file2 frnd frnd1.cpp log1.txt log3.txt log5.txt
file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt
$ ls orig_dir/
file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt test
file2 frnd frnd1.cpp log1.txt log3.txt log5.txt
$ diff new_dir/ orig_dir/
Only in new_dir/: file
Only in orig_dir/: test
1) Utilisez -i pour ignorer les différences de casse
$ cat file1
HI
$ cat file2
hi
$ diff file1 file2
1c1
< HI --- > hi
$ diff -i file1 file2
$
2) Signaler que les fichiers sont identiques à l'aide de l'option -s
$ diff -is file1 file2
Files file1 and file2 are identical
3) Utilisez -b pour ignorer les espaces
$ cat file1
Hi, how are you?
$ cat file2
Hi, how are you?
$ diff file1 file2
1c1
< Hi, how are you?
---
> Hi, how are you?
$ diff -b file1 file2
$
diff -Naur old/ new/