<Précédent | Table des matières | Suivant>
diff
Comme le comm programme, diff est utilisé pour détecter les différences entre les fichiers. Cependant, diff est un outil beaucoup plus complexe, prenant en charge de nombreux formats de sortie et la capacité de traiter de grandes collections de fichiers texte à la fois. diff est souvent utilisé par les développeurs de logiciels pour examiner les changements entre différentes versions du code source du programme, et a ainsi la capacité d'examiner de manière récursive les répertoires de code source, souvent appelés arbres sources. Une utilisation courante pour diff est la création de fichiers diff or patchs qui sont utilisés par des programmes tels que pièce (dont nous parlerons bientôt) pour convertir une version d'un fichier (ou de fichiers) en une autre version.
Si on utilise diff pour regarder nos fichiers d'exemple précédents :
[moi@linuxbox ~]$ fichier diff1.txt fichier2.txt
1d0
< a 4a4
> e
[moi@linuxbox ~]$ fichier diff1.txt fichier2.txt
1d0
< a 4a4
> e
Nous voyons son style de sortie par défaut : une description concise des différences entre les deux fichiers. Dans le format par défaut, chaque groupe de modifications est précédé d'un commande de changement sous la forme de plage de fonctionnement de la plage pour décrire les positions et les types de modifications nécessaires pour convertir le premier fichier en deuxième fichier :
Tableau 20-4 : commandes de changement diff
Changer la description
Changer la description
r1ar2 Ajoutez les lignes à la position r2 dans le deuxième fichier à la position
r1 dans le premier fichier.
r1cr2 Changer (remplacer) les lignes à la position r1 avec les lignes à la position r2 dans le deuxième fichier.
r1dr2 Supprimez les lignes du premier fichier à la position r1, qui serait apparu à portée r2 dans le deuxième fichier
Dans ce format, une plage est une liste séparée par des virgules de la ligne de début et de la ligne de fin. Bien que ce format soit le format par défaut (principalement pour la conformité POSIX et la compatibilité descendante avec les versions Unix traditionnelles de diff), il n'est pas aussi largement utilisé que d'autres formats optionnels. Deux des formats les plus populaires sont format de contexte et la format unifié.
Lorsqu'il est visualisé à l'aide du format contextuel (le -c option), nous verrons ceci :
[moi@linuxbox ~]$ diff -c fichier1.txt fichier2.txt
*** fichier1.txt 2008-12-23 06:40:13.000000000 -0500
--- fichier2.txt 2008-12-23 06:40:34.000000000 -0500
***************
*** 1,4 ****
- abcd
--- 1,4 ----
bcd
+ et
[moi@linuxbox ~]$ diff -c fichier1.txt fichier2.txt
*** fichier1.txt 2008-12-23 06:40:13.000000000 -0500
--- fichier2.txt 2008-12-23 06:40:34.000000000 -0500
***************
*** 1,4 ****
- abcd
--- 1,4 ----
bcd
+ et
La sortie commence par les noms des deux fichiers et leurs horodatages. Le premier fichier est marqué d'astérisques et le second de tirets. Dans le reste de la liste, ces marqueurs désignent leurs fichiers respectifs. Ensuite, nous voyons des groupes de modifications, avec le nombre par défaut de lignes de contexte environnantes. Dans le premier groupe, nous voyons :
*** 1,4 ***
qui indique les lignes 1 à 4 du premier fichier. On voit ensuite :
--- 1,4 ---
qui indique les lignes 1 à 4 du deuxième fichier. Dans un groupe de modifications, les lignes commencent par l'un des quatre indicateurs suivants :
Tableau 20-5 : Indicateurs de changement de format de contexte diff
Signification de l'indicateur
Signification de l'indicateur
vide Une ligne affichée à titre contextuel. Elle n'indique aucune différence entre les deux fichiers.
- Une ligne a été supprimée. Cette ligne apparaîtra dans le premier fichier, mais pas dans le second.
+ Une ligne a été ajoutée. Cette ligne apparaîtra dans le deuxième fichier, mais pas dans le premier.
! Une ligne a été modifiée. Les deux versions de la ligne seront affichées, chacune dans sa section respective du groupe de modifications.
Le format unifié est similaire au format contextuel, mais plus concis. Il est spécifié avec le -u option:
[moi@linuxbox ~]$ diff -u fichier1.txt fichier2.txt
--- fichier1.txt 2008-12-23 06:40:13.000000000 -0500
+++ fichier2.txt 2008-12-23 06:40:34.000000000 -0500
@@ -1,4 +1,4 @@
-abcd
+e
[moi@linuxbox ~]$ diff -u fichier1.txt fichier2.txt
--- fichier1.txt 2008-12-23 06:40:13.000000000 -0500
+++ fichier2.txt 2008-12-23 06:40:34.000000000 -0500
@@ -1,4 +1,4 @@
-abcd
+e
La différence la plus notable entre les formats contextuel et unifié réside dans l'élimination des lignes de contexte dupliquées, ce qui rend les résultats du format unifié plus courts que ceux du format contextuel. Dans l'exemple ci-dessus, nous voyons des horodatages de fichier similaires à ceux du format contextuel, suivis de la chaîne. @@ -1,4 +1,4 @@Ceci indique les lignes du premier fichier et celles du second fichier décrites dans le groupe de modifications. Viennent ensuite les lignes elles-mêmes, avec les trois lignes de contexte par défaut. Chaque ligne commence par l'un des trois caractères suivants :
Tableau 20-6 : Indicateurs de changement de format unifié diff
Caractère Signification
Caractère Signification
vide Cette ligne est partagée par les deux fichiers.
- Cette ligne a été supprimée du premier fichier.
+ Cette ligne a été ajoutée au premier fichier.