DIFFユーティリティは2つのファイルに対して機能します。一度に3つ以上のファイルを比較するにはどうすればよいですか?


84

したがって、ユーティリティDiffは、2つのファイルに対して必要なように機能しますが、一度に2つ以上のファイル、場合によっては一度に最大10個のファイルとの比較が必要なプロジェクトがあります。これには、これらすべてのファイルを互いに並べて配置する必要もあります。私の研究では実際には何も判明していません。vimdiffは、一度に4つを比較できる機能を備えており、これまでで最高のようです。

私の質問:一度に3つ以上のファイルを比較するユーティリティ、またはdiff / vimdiffをハックして複数の比較を実行できるようにする方法はありますか?比較するファイルは比較的短いので、遅すぎないようにしてください。

前もって感謝します!

回答:


111

Diffuseを使用すると、10個のファイルを並べて表示し、違いを強調表示することが簡単にできます。次のように、コマンドラインですべてのファイルを指定するだけです。

拡散1.txt2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt 10.txt


1
うわーこれはすごい!遅くても返事をありがとう、私はまだ助けが必要でした。
Javed Ahamed

1
この種の比較は何と呼ばれますか?
leeand00 2010

4
素晴らしいツール。厄介な問題を解決するのに役立ちました。古い答えだと思いますが、ありがとうございます!
SeanKilleen 2010

千回ありがとう!コピーして貼り付けたファイルの束の小さな違いを見つけるのに大いに役立ちました。
trass3r 2013

1
@Gruber -私が悪い時にリンクを打つ必要があります-私は私のコメントを削除しました
combatc2

28

Vimはすでにこれを行うことができます:

vim -d file1 file2 file3

ただし、通常は4つのファイルに制限されています。ただし、Vimのソースの1行を変更することで変更できます。定数DB_COUNTは、差分ファイルの最大数を定義し、diff.cバージョン6.x以前では上に向かって定義されstructs.h、バージョン7.0以降では約3分の2下に定義されます。


vimdiffまたはvim-dは、少なくとも私のコンピューターでは一度に4つのファイルしか実行できません。誰かがこれを回避する方法を知っていますか?
Javed Ahamed

質問の中でその言及に気づかなかった。Vimの制限を変更する手順を含むように更新されました。
ノアメドリング2009

ねえ、実際にstructs.hまたはdiff.cにアクセスする方法を知っていますか?WinまたはLinuxでvimのソースコードが見つかりません。
Javed Ahamed

vimは、3つ以上のディレクトリのディレクトリ比較を実行できないようです。これにより、有用性が制限されます。さらに、ファイルを相互に比較すると、ファイルの左側しか表示されないため、すべてを表示するスクロールバーがないという制限があります。また、変更を前後にプッシュするGUIメソッドはありません。
JeremeGuenther19年

7

diffにはオプション--from-fileとが組み込まれており--to-file、1つのオペランドを他のすべてのオペランドと比較します。

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

これを実際のファイルパスの代わりにプロセス置換で機能させたいと思います。
Jan KyuPeblik19年

1
@JanKyuPeblikあなたはzshのを使用している場合は、その一時ファイルの名前に一時ファイルとは膨張に出力を書き込みプロセス置換の=(...)フォームをチェックアウトzsh.sourceforge.net/Doc/Release/...
エリックを

2

「BeyondCompare」をチェックアウト:http//www.scootersoftware.com/

ファイルのディレクトリ全体を比較でき、Linuxでも実行されているように見えます。


1
diff -rはファイルのディレクトリ全体も比較しますが、一方のディレクトリのファイルをもう一方のディレクトリのファイルと比較するだけです
reinierpost 2010

6
Beyond Compareはすばらしいツールであり、マージの競合を解決するために常に使用しています。ただし、2つのファイルを相互に、または共通の祖先としか比較できないため、このジョブに適したツールではありません。
スーパーオール2017

-1で申し訳ありませんが、これは多くのファイルを相互に比較することです。
Manohar Reddy Poreddy

1

1つのファイルに基づいて複数のdiffを実行している場合は、各ディレクトリを実行してdiffを実行するforループを持つスクリプトを作成してみてください。並べて表示することはできませんが、少なくともすばやく比較することができます。それが役に立ったことを願っています。


ええ、でも、たとえば3つのファイルを比較する場合、diffはそれらが一致する場所を確認するために再配置するため、他の2つのファイルのそれぞれに対してすべてdiffを実行する必要があります。
Javed Ahamed

私はあなたのスクリプトに役立つかもしれないこのコマンドを見つけました。それはdiff3と呼ばれ、おそらく3つのファイルを比較するためのユーティリティです。 linux.about.com/library/cmd/blcmdl1_diff3.htmWindows バージョンはここにありますgnuwin32.sourceforge.net/packages/diffutils.htm–
ベンジャミンニール

0

主な質問には答えていませんが、Benjamin Neilが提案したものと似てますが、すべてのファイルが異なります。

ファイル名を配列に格納してから、サイズ2と差分の組み合わせをループします(または必要な操作を行います)。

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


0

これを行う簡単で良い方法があります= GREP。

テキストのサイズに応じて、テキストをコピーして貼り付けるか、ファイルの入力をgrepコマンドにリダイレクトすることができます。grep -vir / pathを作成して逆検索を行うか、grep -ir / pathを作成する場合。これが私の認定試験の方法です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.