99

因此,实用程序 Diff 就像我想要的 2 个文件一样工作,但我有一个项目需要一次与 2 个以上的文件进行比较,一次可能最多 10 个。这也需要将所有这些文件并排放置。我的研究并没有真正发现任何东西,vimdiff 似乎是迄今为止最好的,能够一次比较 4 个。

我的问题:是否有任何实用程序可以一次比较两个以上的文件,或者有一种方法可以破解 diff/vimdiff 以便它可以进行多重比较?我将要比较的文件相对较短,所以它不应该太慢。

提前致谢!

4

7 回答 7

116

使用Diffuse可以轻松并排显示 10 个文件并突出显示差异。只需在命令行上指定所有文件,如下所示:

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

于 2009-07-12T13:52:16.100 回答
36

Vim 已经可以做到这一点:

vim -d file1 file2 file3

但是您通常限制为 4 个文件。但是,您可以通过修改 Vim 源代码中的一行来更改它。该常量定义了diffDB_COUNT文件的最大数量,它在 6.x 及更早版本中定义为顶部,或在 7.0 及更高版本中定义为向下的大约三分之二。diff.cstructs.h

于 2009-07-02T17:54:16.847 回答
15

diff具有内置选项--from-fileand --to-file,它将一个操作数与所有其他操作数进行比较。

   --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.

注意:参数名称--to-file是可选的。例如

# 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
于 2019-03-04T21:57:11.523 回答
2

结帐“超越比较”:http ://www.scootersoftware.com/

它可以让您比较文件的整个目录,并且看起来它也可以在 Linux 上运行。

于 2009-07-02T17:50:15.073 回答
1

如果您运行的多个差异基于一个文件,您可能会尝试编写一个具有 for 循环的脚本来运行每个目录并运行差异。尽管它不会并排,但您至少可以快速比较它们。希望有帮助。

于 2009-07-02T17:59:01.270 回答
0

没有回答主要问题,但这里有一些类似于Benjamin Neil 的建议diff ing所有文件:

将文件名存储在一个数组中,然后遍历 size 2 和 diff 的组合(或做任何你想做的事情)。

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

源自@charles-duffy的回答:https ://stackoverflow.com/a/46719215/1160428

于 2020-07-03T19:35:17.563 回答
-1

有一个简单的好方法可以做到这一点= GREP。

根据文本的大小,您可以复制并粘贴它,或者您可以将文件的输入重定向到 grep 命令。如果您使用 grep -vir /path 进行反向搜索或使用 grep -ir /path。这是我参加认证考试的方式。

于 2020-11-02T17:01:04.230 回答