DIFF utility works for 2 files. How to compare more than 2 files at a time?

HtmlDiffVimdiffN Way-Merge

Html Problem Overview


So the utility Diff works just like I want for 2 files, but I have a project that requires comparisons with more than 2 files at a time, maybe up to 10 at a time. This requires having all those files side by side to each other as well. My research has not really turned up anything, vimdiff seems to be the best so far with the ability to compare 4 at a time.

My question: Is there any utility to compare more than 2 files at a time, or a way to hack diff/vimdiff so it can do multiple comparisons? The files I will be comparing are relatively short so it should not be too slow.

Thanks in advance!

Html Solutions


Solution 1 - Html

Displaying 10 files side-by-side and highlighting differences can be easily done with Diffuse. Simply specify all files on the command line like this:

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

Solution 2 - Html

Vim can already do this:

vim -d file1 file2 file3

But you're normally limited to 4 files. You can change that by modifying a single line in Vim's source, however. The constant DB_COUNT defines the maximum number of diffed files, and it's defined towards the top of diff.c in versions 6.x and earlier, or about two thirds of the way down structs.h in versions 7.0 and up.

Solution 3 - Html

diff has built-in option --from-file and --to-file, which compares one operand to all others.

   --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: argument name --to-file is optional. e.g.

# 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

Solution 4 - Html

Checkout "Beyond Compare": http://www.scootersoftware.com/

It lets you compare entire directories of files, and it looks like it runs on Linux too.

Solution 5 - Html

if your running multiple diff's based off one file you could probably try writing a script that has a for loop to run through each directory and run the diff. Although it wouldn't be side by side you could at least compare them quickly. hope that helped.

Solution 6 - Html

Not answering the main question, but here's something similar to what Benjamin Neil has suggested but diffing all files:

Store the filenames in an array, then loop over the combinations of size two and diff (or do whatever you want).

files=($(ls -d /path/of/files/some-prefix.*))     # Array of files to compare
max=${#files[@]}                                  # Take the length of that array
for ((idxA=0; idxA<max; idxA++)); do              # iterate idxA from 0 to length
  for ((idxB=idxA + 1; idxB<max; idxB++)); do     # iterate idxB + 1 from idxA to length
    echo "A: ${files[$idxA]}; B: ${files[$idxB]}" # Do whatever you're here for.
  done
done

Derived from @charles-duffy's answer: https://stackoverflow.com/a/46719215/1160428

Solution 7 - Html

There is a simple an good way to do this = GREP.

Depending on the size of the text you can copy and paste it, or you can redirect the input of the file to the grep command. If you make a grep -vir /path to make a reverse search or a grep -ir /path. This is my way for certification exams.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJaved AhamedView Question on Stackoverflow
Solution 1 - HtmlDerrick MoserView Answer on Stackoverflow
Solution 2 - HtmlNoah MedlingView Answer on Stackoverflow
Solution 3 - HtmlPeacher WuView Answer on Stackoverflow
Solution 4 - HtmlScott AndersonView Answer on Stackoverflow
Solution 5 - HtmlBenjamin NeilView Answer on Stackoverflow
Solution 6 - HtmlanaskView Answer on Stackoverflow
Solution 7 - Htmluser14565488View Answer on Stackoverflow