web-dev-qa-db-ja.com

2つのディレクトリツリーがあるとしたら、どのファイルが違うのかをどうやって見つけることができますか?

2つのディレクトリツリーの違いを知りたい場合は、通常次のように実行します。

diff -r dir1/ dir2/

対応するファイル間の違いが正確に出力されます。内容が異なる対応ファイルのリストを取得するだけに興味があります。これは単にdiffにコマンドラインオプションを渡すだけの問題だと思いましたが、manページには何も見つかりませんでした。

助言がありますか?

692

あなたはLinuxを言ったので、あなたは運がいいです(少なくともそれが利用可能であるべきです、それがいつ追加されたかはわからない):

diff --brief --recursive dir1/ dir2/ # GNU long options
diff -qr dir1/ dir2/ # common short options

あなたが必要とすることをするべきです。

どちらのディレクトリにも存在しない可能性のあるファイルの違いも確認したい場合は、次のようにします。

diff --brief --recursive --new-file dir1/ dir2/ # GNU long options
diff -qrN dir1/ dir2/ # common short options
990
Mark Loeser

私が使用するコマンドは:

diff -qr dir1/ dir2/

Markのものと全く同じです:)しかし、彼の答えはそれが異なった types のフラグを使っているので私を悩ませました、そしてそれは私を二度見せました。 Markのより詳細なフラグを使うと、次のようになります。

diff  --brief --recursive dir1/ dir2/

他の答えが完全に受け入れられるとき私は掲示することをお詫び申し上げます。自分自身を止めることができませんでした...あまりペダントでないことに取り組んでいます。

279
FPC

私はgit diff --no-index dir1/ dir2/を使うのが好きです、なぜならそれは色の違いを示すことができ(あなたのgit設定でそのオプションが設定されている場合)そしてそれが "less"を使って長いページ出力のすべての違いを示すからです。

89
Alan Porter

これら2つのコマンドは、基本的に要求されたことを行います。

diff --brief --recursive --no-dereference --new-file --no-ignore-file-name-case /dir1 /dir2 > dirdiff_1.txt

rsync --recursive --delete --links --checksum --verbose --dry-run /dir1/ /dir2/ > dirdiff_2.txt

どちらを選択するかは、dir1とdir2の場所によって異なります。

ディレクトリが2つの別々のドライブにあるとき、diffはrsyncよりも優れています。しかし、比較した2つのディレクトリが同じドライブ上にある場合は、rsyncのほうが速くなります。これは、diffが両方のディレクトリにほぼ等しい負荷を並列にかけ、2つのドライブの負荷を最大にするためです。

rsyncは実際にそれらを比較する前に大きな塊でチェックサムを計算します。これにより、I/O操作が大きなチャンクにまとめられ、単一のドライブで処理が行われるときの処理効率が向上します。

30
CodeBug

Meldは、2つのディレクトリを比較するための優れたツールでもあります。

meld dir1/ dir2/

Meldにはファイルやディレクトリを比較するための多くのオプションがあります。 2つのファイルが異なる場合は、ファイル比較モードに入り、正確な違いを確認するのは簡単です。

15
Alexander

(freenode /#centos名声の)チャンネル同胞の 'billings'は彼の方法を私と共有しました:

diff -Naur dir1/ dir2

スラッシュを含む最後のディレクトリを含めることは重要ではありません。

また、-uオプションはいくつかの古い/サーババージョンのdiffでは利用できないようです。

差分の違い:

# diff -Nar /tmp/dir1 /tmp/dir2/
diff -Nar /tmp/dir1/file /tmp/dir2/file
28a29
> TEST

# diff -qr /tmp/dir1/ /tmp/dir2/
Files /tmp/dir1/file and /tmp/dir2/file differ
9
todd_dsm

Diffoscope は素晴らしいコマンドラインベースのディレクトリ差分ツールです。

私はそれがファイルに差分できることが特に好きです。

それは、多くの種類のアーカイブを再帰的に解凍し、それらを比較するためにさまざまなバイナリフォーマットをより人間が読める形式に変換します。 2つのtarball、ISOイメージ、またはPDFを同じように簡単に比較できます。

どのファイルが違うのかだけでなく、どのように違うのかもわかります。

3
nh2

Diffを見つけるには、このコマンドを使います。

diff -qr dir1/ dir2/

-r すべてのサブディレクトリも差分にする -q ファイルが異なる場合にのみ差分を報告するようにdiffに指示する。

diff  --brief dir1/ dir2/

--brief はディレクトリに存在しないファイルを表示します。

そうでなければ

違いを見つけるのが簡単なグラフィカルウィンドウで表示されるMeldを使うことができます。

meld  dir1/ dir2/
2
Javeed Shakeel

あなたはRsyncfindを使うこともできます。findの場合:

find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER

しかし、同じ名前で同じサブフォルダにあるが内容が異なるファイルはリストに表示されません。

あなたがGUIのファンなら、あなたは Meld that @Alexander に言及されています。これはウィンドウとLinuxの両方でうまく働きます。

0
Fábio