commande diff

Objectif

Compare les fichiers texte.

Syntaxe

Pour comparer le contenu de deux fichiers

diff [ -c| -C Lignes | -D [ Chaîne ] | -e | -f | -n | -u | -U Lignes ] [ -b ] [ -i ] [ -t ] [ -w ] File1 File2

diff [ -h ] [ -b ] File1 File2

Pour trier le contenu des répertoires et comparer les fichiers qui sont différents

diff [ -c | -C Lignes | -e | -f | -n | -u | -U Lignes ] [ -b ] [ -i ] [ -l ] [ -r ] [ -s ] [ -S Fichier ] [ -t ] [ -w ] Directory1 Directory2

diff [ -h ] [ -b ] Directory1 Directory2

Descriptif

La commande diff compare les fichiers texte. Cela permet de comparer des fichiers uniques ou le contenu des répertoires.
Remarque: La commande diff fonctionne uniquement avec les fichiers d'entrée qui sont des fichiers texte.

Si les paramètres Directory1 et Directory2 sont spécifiés, la commande diff compare les fichiers texte ayant le même nom dans les deux répertoires. Les fichiers binaires qui diffèrent, les sous-répertoires communs et les fichiers qui apparaissent dans un seul répertoire sont répertoriés.

Lorsque la commande diff est exécutée sur des fichiers standard et lorsque vous comparez des fichiers texte qui diffèrent lors de la comparaison de répertoires, la commande diff indique les lignes qui doivent être modifiées dans les fichiers pour qu'ils soient d'accord. Si le paramètre File1 ou File2 n'est pas un répertoire, l'un ou l'autre peut être indiqué sous la forme-(signe moins), auquel cas l'entrée standard est utilisée. Si le paramètre File1 est un répertoire, un fichier de ce répertoire dont le nom de fichier est identique au paramètre File2 est utilisé.

La sortie standard contient des lignes de ces formats:

Lines Affected in File1   Action        Lines Affected in File2
Number1                   a             Number2[,Number3]
Number1[,Number2]         d             Number3
Number1[,Number2]         c             Number3[,Number4] 

Ces lignes ressemblent à des sous-commandes ed pour convertir File1 en File2. Les nombres avant les lettres d'action appartiennent à Fichier1; ceux après appartiennent à File2. Ainsi, en échangeant un pour d et en lisant de droite à gauche, vous pouvez également indiquer comment convertir File2 en File1. Comme dans la commande ed , les paires identiques (où Number1 = Number2) sont abrégées en un seul nombre.

Après chacune de ces lignes, la commande diff affiche toutes les lignes affectées dans le premier fichier précédées d'un signe <: (signe inférieur à, deux points), puis toutes les lignes affectées dans le second fichier sont précédées d'un signe > (signe supérieur à).

Une valeur de sortie de 0 indique aucune différence, 1 indique des différences trouvées et 2 indique une erreur.

Remarque: Si plusieurs indicateurs -c, -C, -D, -e, -fou -n, -uou -U sont spécifiés, le dernier indicateur de la ligne de commande est prioritaire. Le système n'émet pas de message d'erreur.

Indicateurs

Article Descriptif
-b Fait en sorte que toute quantité d'espace à la fin d'une ligne soit traitée comme un caractère de retour à la ligne unique (les caractères d'espace précédant le caractère de retour à la ligne sont ignorés) et que les autres chaînes de caractères d'espace, à l'exclusion des caractères de retour à la ligne, soient comparées de manière égale.
-C Lignes Génère une comparaison de commande diff avec un nombre de lignes de contexte copié égal à la valeur spécifiée par la variable Lignes . L'indicateur -C modifie légèrement la sortie. La sortie commence par l'identification des fichiers impliqués et de leurs dates de création. Chaque changement est séparé par une ligne avec une douzaine*(astérisques). Les lignes supprimées de File1 sont signalées par un-(signe moins) et ceux ajoutés à File2 sont marqués d'un+(signe plus). Les lignes modifiées d'un fichier à l'autre sont marquées dans les deux fichiers avec un!(point d'exclamation). Les modifications qui se trouvent dans les lignes de contexte copiées spécifiées les unes des autres sont regroupées en tant que sortie.
-c Génère une comparaison de commande diff avec trois lignes de contexte copié . L'indicateur -c modifie légèrement la sortie. La sortie commence par l'identification des fichiers impliqués et de leurs dates de création. Chaque changement est séparé par une ligne avec une douzaine*(astérisques). Les lignes supprimées de File1 sont signalées par un-(signe moins) et ceux ajoutés à File2 sont marqués d'un+(signe plus). Les lignes modifiées d'un fichier à l'autre sont marquées dans les deux fichiers avec un!(point d'exclamation). Les modifications dans les lignes de contexte copiées spécifiées les unes des autres sont regroupées en tant que sortie.
-D [ Chaîne ] Permet à la commande diff de créer une version fusionnée de File1 et de File2 dans la sortie standard. Les contrôles de préprocesseur C sont inclus de sorte qu'une compilation du résultat sans définir de chaîne soit équivalente à la compilation de File1, tandis que la définition de chaîne génère File2.
-e Génère une sortie sous une forme adaptée à l'utilisation avec l'éditeur ed pour convertir File1 en File2. Lorsque vous utilisez cet indicateur, le programme shell suivant peut vous aider à conserver plusieurs versions d'un fichier. Uniquement un fichier ancestral ($ 1) et une chaîne de scripts ed de version à version ($ 2, $ 3, ...) par la commande diff doit être à portée de main. La dernière version apparaît sur la sortie standard comme suit:
(shift; cat $*; echo '1,$p') | ed - $1
Des commandes supplémentaires sont ajoutées à la sortie lorsque l'indicateur -e est utilisé pour comparer les répertoires. Le résultat est donc un script shell permettant de convertir les fichiers texte communs aux deux répertoires de leur état dans Directory1 à leur état dans Directory2.
Remarque: L'édition des scripts produits par les indicateurs -e ou -f ne peut pas créer de lignes composées d'une seule ligne. (point).
-f Génère une sortie sous une forme qui ne convient pas à l'éditeur ed , présentant les modifications nécessaires pour convertir File1 en File2 dans l'ordre inverse de celui produit sous l'indicateur -e .
-h Effectue une autre comparaison qui peut être plus rapide si les sections modifiées sont courtes et bien séparées. L'indicateur -h fonctionne sur les fichiers de n'importe quelle longueur. Les indicateurs -c, -C, -D, -e, -fet -n ne peuvent pas être utilisés avec l'indicateur -h . Tous les autres indicateurs, à l'exception de l'indicateur -b , sont ignorés lorsqu'ils sont utilisés avec l'indicateur -h .
-i Ignore la casse des lettres. Par exemple, une minuscule a est traitée comme une majuscule A.
-l Format de sortie long. Chaque résultat de la comparaison du fichier texte de la commande diff est obtenu à l'aide de la commande pr pour la pagination. Les autres différences sont rappelées et résumées une fois que toutes les différences entre les fichiers texte ont été signalées.
-n Produit une sortie similaire à celle de l'indicateur -e , mais dans l'ordre inverse et avec un nombre de lignes modifiées sur chaque commande d'insertion ou de suppression. Il s'agit du format utilisé par le système de contrôle de révision (RCS).
-r Entraîne l'application récursive de la commande diff aux sous-répertoires communs rencontrés.
-S Fichiers de rapports identiques et non mentionnés dans les autres cas.
-S [ Fichier ] Ignore les fichiers dont les noms sont regroupés avant le fichier spécifié par la variable Fichier lors de la comparaison des répertoires. L'indicateur -S s'applique uniquement aux répertoires spécifiés dans les paramètres Directory1 et Directory2 . Si vous utilisez l'indicateur -r avec l'indicateur -S , l'indicateur -S ne fonctionne pas de manière récursive dans les sous-répertoires Directory1 et Directory2 .
-t Développe les onglets dans les lignes de sortie. La sortie standard ou la sortie de l'indicateur -c ajoute des caractères au début de chaque ligne, ce qui peut affecter l'indentation des lignes source d'origine et rend la liste de sortie difficile à interpréter. Cet indicateur conserve l'indentation de la source d'origine.
-u Produit une comparaison de commande diff avec trois lignes de contexte unifié.

La sortie est similaire à celle de l'indicateur -c , sauf que les lignes de contexte ne sont pas répétées ; à la place, les lignes de contexte, supprimées et ajoutées sont affichées ensemble, imbriquées.

-U Lignes Produit une comparaison de commande diff avec un nombre de lignes de contexte unifié égal à la valeur spécifiée par la variable Lignes . La sortie est similaire à celle de l'indicateur -C , sauf que les lignes de contexte ne sont pas répétées ; à la place, les lignes de contexte, supprimées et ajoutées sont affichées ensemble, imbriquées.
-w Ignore tous les espaces et les caractères de tabulation et traite toutes les autres chaînes de blancs comme équivalentes. Par exemple :if ( a == b )compare également àif(a==b).

Statut de sortie

Cette commande renvoie les valeurs de sortie suivantes :

Article Descriptif
0 % Aucune différence n'a été trouvée.
1 seul Des différences ont été trouvées.
> 1 Une erreur s'est produite.

Exemples

  1. Pour comparer deux fichiers, entrez:
    diff chap1.back chap1
    Affiche les différences entre les fichierschap1.baketchap1.
  2. Pour comparer deux fichiers tout en ignorant les différences dans la quantité d'espaces, entrez:
    diff  -w prog.c.bak prog.c
    Si deux lignes ne diffèrent que par le nombre d'espaces et de tabulations entre les mots, la commande diff -w les considère comme identiques.
  3. Pour créer un fichier contenant des commandes que la commande ed peut utiliser pour reconstruire un fichier à partir d'un autre, entrez:
    diff  -e chap2 chap2.old >new.to.old.ed
    Cela crée un fichier nomménew.to.old.edqui contient les sous-commandes ed à modifierchap2retour dans la version du texte trouvé danschap2.old. Dans la plupart des cas,new.to.old.edest un fichier beaucoup plus petit quechap2.old. Vous pouvez économiser de l'espace disque en supprimantchap2.old, et vous pouvez le reconstruire à tout moment en entrant:
    (cat new.to.old.ed ; echo '1,$p') | ed - chap2 >chap2.old
    Les commandes entre parenthèses s'ajoutent1,$pà la fin des commandes d'édition envoyées à l'éditeur ed . :NONE.1,$ppermet à la commande ed d'écrire le fichier dans la sortie standard après l'avoir modifiée. Cette séquence de commandes modifiée est ensuite envoyée à la commande ed (| ed), et l'éditeur le lit comme une entrée standard. L'indicateur - permet à la commande ed de ne pas afficher la taille du fichier et d'autres informations supplémentaires car elle serait mélangée avec le texte dechap2.old.

Fichiers

Article Descriptif
/usr/bin/diff Contient la commande diff .