GNU/Linux >> Tutoriels Linux >  >> Linux

Comment faire la différence (uniquement les ajouts) entre deux fichiers sous Linux

diff puis grep pour le type de modification souhaité.

diff -u A1 A2 | grep -E "^\+"

Une approche similaire à https://stackoverflow.com/a/15385080/337172 mais, espérons-le, plus compréhensible et facile à modifier :

diff \
  --new-line-format="%L" \
  --old-line-format="" \
  --unchanged-line-format="" \
  A1 A2

La plupart des éléments ci-dessous sont copiés directement à partir de la réponse serverfault de @TomOnTime ici. En bas se trouve une tentative qui fonctionne sur des fichiers non triés, mais la commande trie les fichiers avant de donner le diff, donc dans de nombreux cas, ce ne sera pas ce qui est souhaité. Pour les différences bien formatées de fichiers non triés, vous trouverez peut-être les autres réponses plus utiles (merci à @Fritz pour l'avoir signalé) :

Afficher les lignes qui n'existent que dans le fichier a :(c'est-à-dire ce qui a été supprimé de a)

comm -23 a b

Afficher les lignes qui n'existent que dans le fichier b :(c'est-à-dire ce qui a été ajouté à b)

comm -13 a b

Afficher les lignes qui n'existent que dans un fichier ou dans l'autre :(mais pas les deux)

comm -3 a b | sed 's/^\t//'

(Attention :si le fichier a a des lignes qui commencent par TAB, il (le premier TAB) sera supprimé de la sortie.)

REMARQUE :Les deux fichiers doivent être triés pour que "comm" fonctionne correctement. S'ils ne sont pas déjà triés, vous devez les trier :

sort <a >a.sorted
sort <b >b.sorted
comm -12 a.sorted b.sorted

Si les fichiers sont extrêmement longs, cela peut être assez lourd car cela nécessite une copie supplémentaire et donc deux fois plus d'espace disque.

Edit :notez que la commande peut être écrite de manière plus concise en utilisant la substitution de processus (merci à @phk pour le commentaire) :

comm -12 <(sort < a) <(sort < b)

Vous pouvez essayer ceci

diff --changed-group-format='%>' --unchanged-group-format='' A1 A2

Les options sont documentées dans man diff :

       --GTYPE-group-format=GFMT
              format GTYPE input groups with GFMT

et :

       LTYPE is 'old', 'new', or 'unchanged'.
              GTYPE is LTYPE or 'changed'.

et :

              GFMT (only) may contain:

       %<     lines from FILE1

       %>     lines from FILE2

       [...]

Linux
  1. Comment transférer des fichiers entre deux ordinateurs à l'aide des commandes nc et pv

  2. Comment utiliser la commande Linux find pour rechercher des fichiers

  3. Comment trouver tous les fichiers épars sous Linux

  4. Comment faire un diff binaire sur deux fichiers de taille identique sous Linux ?

  5. Comment obtenir la taille physique d'un fichier sous Linux ?

Quelle est la différence entre Linux et Unix ?

Comment afficher deux fichiers côte à côte sous Linux

Comment comparer deux fichiers dans un terminal Linux

Comment synchroniser automatiquement des fichiers entre deux serveurs Linux

Comment rechercher des fichiers avec la commande fd sous Linux

Différence d'espace entre deux fichiers sous Linux