101 votes

L'utilitaire DIFF fonctionne pour 2 fichiers. Comment comparer plus de 2 fichiers à la fois ?

L'utilitaire Diff fonctionne donc comme je le souhaite pour 2 fichiers, mais j'ai un projet qui nécessite des comparaisons avec plus de 2 fichiers à la fois, peut-être jusqu'à 10 à la fois. Cela nécessite d'avoir tous ces fichiers côte à côte les uns par rapport aux autres également. Mes recherches n'ont pas vraiment abouti, vimdiff semble être le meilleur jusqu'à présent avec la possibilité de comparer 4 fichiers à la fois.

Ma question : Existe-t-il un utilitaire permettant de comparer plus de 2 fichiers à la fois, ou un moyen de modifier diff/vimdiff pour qu'il puisse effectuer des comparaisons multiples ? Les fichiers que je vais comparer sont relativement courts, donc cela ne devrait pas être trop lent.

Merci d'avance !

119voto

L'affichage de 10 fichiers côte à côte et la mise en évidence des différences peuvent être facilement réalisés avec Diffuse . Il suffit de spécifier tous les fichiers sur la ligne de commande comme ceci :

diffuse 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt 10.txt

1 votes

Wow, c'est génial ! Merci pour la réponse, même tardive, j'avais quand même besoin d'aide.

2 votes

Comment appelle-t-on ce genre de comparaison ?

4 votes

Outil fantastique ; vient de m'aider à résoudre un problème contrariant. Je sais que c'est une ancienne réponse, mais merci !

37voto

Noah Medling Points 2743

Vim peut déjà le faire :

vim -d file1 file2 file3

Mais vous êtes normalement limité à 4 fichiers. Vous pouvez cependant changer cela en modifiant une seule ligne dans le source de Vim. La constante DB_COUNT définit le nombre maximum de diff et il est défini vers le haut de l'écran. diff.c dans les versions 6.x et antérieures, ou environ deux tiers de la descente structs.h dans les versions 7.0 et supérieures.

0 votes

Vimdiff ou vim -d ne peuvent faire que 4 fichiers à la fois, du moins sur mon ordinateur. Quelqu'un sait comment contourner cela ?

0 votes

Je n'avais pas remarqué que cela était mentionné dans la question. Mis à jour pour inclure les instructions sur la modification de la limite de Vim.

0 votes

Hé, vous savez comment accéder à structs.h ou diff.c ? Je ne trouve pas le code source de vim sur Win ou Linux.

15voto

Peacher Wu Points 171

diff a une option intégrée --from-file y --to-file qui compare un opérande à tous les autres.

   --from-file=FILE1
          Compare FILE1 to all operands.  FILE1 can be a directory.

   --to-file=FILE2
          Compare all operands to FILE2.  FILE2 can be a directory.

Note : le nom de l'argument --to-file est facultatif. Par exemple

# this will compare foo with bar, then foo with baz .html files
$ diff  --from-file foo.html bar.html baz.html

# this will compare src/base-main.js with all .js files in git repo,
# that has 'main' in their filename or path
$ git ls-files :/*main*.js | xargs diff -u --from-file src/base-main.js

0 votes

J'aimerais pouvoir le faire fonctionner avec la substitution de processus au lieu des vrais chemins de fichiers.

1 votes

@JanKyuPeblik Si vous utilisez zsh, vérifiez la forme =(...) de substitution de processus qui écrit la sortie dans un fichier temporaire et s'étend au nom de ce fichier temporaire. zsh.sourceforge.net/Doc/Release/

1voto

Scott Points 498

Consultez la rubrique "Beyond Compare" : http://www.scootersoftware.com/

Il vous permet de comparer des répertoires entiers de fichiers, et il semble qu'il fonctionne aussi sous Linux.

1 votes

Diff -r compare également des répertoires entiers de fichiers, mais il ne compare jamais que les fichiers d'un répertoire avec les fichiers de l'autre répertoire.

8 votes

Beyond Compare est un outil magnifique, et je l'utilise tout le temps pour résoudre des conflits de fusion. Cependant, ce n'est pas le bon outil pour ce travail, car il ne peut comparer deux fichiers que l'un par rapport à l'autre ou par rapport à un ancêtre commun.

0 votes

Désolé pour le -1, mais il s'agit de comparer plusieurs fichiers entre eux.

1voto

Benjamin Neil Points 79

Si vous exécutez plusieurs diff basés sur un seul fichier, vous pourriez probablement essayer d'écrire un script qui a une boucle for pour exécuter à travers chaque répertoire et exécuter le diff. Bien que ce ne serait pas côte à côte, vous pourriez au moins les comparer rapidement. J'espère que cela a aidé.

0 votes

Oui, mais si je comparais par exemple 3 fichiers, je voudrais qu'ils soient tous comparés à chacun des 2 autres fichiers, puisque diff fait ce réarrangement pour voir où ils correspondent.

0 votes

J'ai trouvé cette commande qui pourrait vous aider avec votre script, elle s'appelle diff3 et soi-disant c'est un utilitaire pour comparer trois fichiers. linux.about.com/library/cmd/blcmdl1_diff3.htm la version Windows peut être trouvée ici gnuwin32.sourceforge.net/packages/diffutils.htm

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X