2つのディレクトリツリーの違いを見つけたい場合は、通常は次のように実行します。
diff -r dir1/ dir2/
これにより、対応するファイル間の違いが正確に出力されます。内容が異なる対応ファイルのリストを取得したいだけです。これは単にコマンドラインオプションをに渡すだけのことdiff
だと思いましたが、マニュアルページには何も見つかりませんでした。
助言がありますか?
dircmp
UNIX ではコマンドを使用(Linuxではない)
2つのディレクトリツリーの違いを見つけたい場合は、通常は次のように実行します。
diff -r dir1/ dir2/
これにより、対応するファイル間の違いが正確に出力されます。内容が異なる対応ファイルのリストを取得したいだけです。これは単にコマンドラインオプションをに渡すだけのことdiff
だと思いましたが、マニュアルページには何も見つかりませんでした。
助言がありますか?
dircmp
UNIX ではコマンドを使用(Linuxではない)
回答:
あなたは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
diff -qr dir1/ dir2/
、私の拡張バージョンはdiff -qr dir1/ dir2/ | grep ' differ'
--brief
ショートカットだけに変更しました-q
。
--brief
。-brief
は-b -r -i -e -f
、つまり、単一のオプションとしてではなく、フラグのセットとして解釈されます。
私が使用するコマンドは:
diff -qr dir1/ dir2/
それはマークのそれとまったく同じです:)しかし、彼の答えはそれが異なるタイプのフラグを使用するので私を悩ませました、そしてそれは私を二度見させました。Markのより詳細なフラグを使用すると、次のようになります。
diff --brief --recursive dir1/ dir2/
他の回答が完全に受け入れられる場合は、投稿をお詫び申し上げます。自分を止めることができませんでした...
q
略ですか?それは何かの略語ですか?私は背後にある任意のロジック見つけることができませんq
...
q
ためですquiet
一般的にはあまり冗長意味します。
git diff --no-index dir1/ dir2/
色の違いを表示できるため(git設定でそのオプションを設定している場合)、「less」を使用して長いページ出力ですべての違いを表示できるため、私はを使用するのが好きです。
--no-index
、stackoverflow.com /a/1792477/473390にさらに追加する必要があります。@ alan-porterの回答を更新しました。
--name-status
コマンドラインに追加すると、変更/追加/削除ステータスの「M / A / D」フラグが付いたファイル名リストが表示されるだけです。
これらの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操作が大きなチャンクにグループ化され、単一のドライブで処理が行われる場合の処理がより効率的になります。
rsync --options /usr /bin /var /sbin /lib /old_root
効果的に現在のルートを比較します/
(これですべてのサブディレクトリを指定することによって)と/old_root
(例えば一部の古いバックアップを含む/
何かである、)diff -r
缶しません。また、同じサイズ、アクセス許可、およびタイムスタンプのファイルがおそらく変更されていないと想定した場合、除外--checksum
すると、変更された可能性のあるファイルのチェックが非常に高速になります(そうでない場合)。
--delete
with の目的は何rsync
ですか?
--dry-run
フラグ)何も実際に削除されていない、rsync
ファイルがDIR1ではなくDIR2にある唯一の版画
--dry-run
誤って忘れないように、常に最初に置くことをお勧めします。
Meldは、2つのディレクトリを比較するための優れたツールでもあります。
meld dir1/ dir2/
Meldには、ファイルまたはディレクトリを比較するための多くのオプションがあります。2つのファイルが異なる場合、ファイル比較モードに入り、正確な違いを確認するのは簡単です。
meld
ただし、大きなディレクトリで使用すると、それがひどく遅くなることがわかります。大きなディレクトリをより適切に処理できるものはありますか?
find dir1 dir2 | cut -d/ -f2- | sort | uniq --unique
meld <(find dir1 -ls ) <(find dir2 -ls)
、bashプロセス置換を使用すると、それがかなりうまくいくことがわかります。(zshの=(command)
動作はさらに優れています。)
(freenode /#centos fameの)チャネルコンパトリオット '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
--new-file/-N
diffは欠落しているファイルを空で--text/-a
あると見なし、すべてのバイナリ入力をテキストであると見なします。この特定のユースケースの利点はわかりません。
diffを見つけるには、次のコマンドを使用します。
diff -qr dir1/ dir2/
-rはすべてのサブディレクトリも比較します -qはファイルが異なる場合にのみ報告するようにdiffに指示します。
diff --brief dir1/ dir2/
--briefは、ディレクトリに存在しないファイルを表示します。
それとも
Meldを使用して、グラフィカルウィンドウに違いを簡単に見つけることができます。
meld dir1/ dir2/
--brief
と-q
同じオプションです。あなたの声明は、それらが異なっているように聞こえますが、そうではありません。
およびも使用できます。の場合:Rsync
find
find
find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER
ただし、同じ名前で同じサブフォルダーにあり、内容が異なるファイルはリストに表示されません。
GUIのファンなら、@ Alexanderが言及したMeldをチェックできます。WindowsとLinuxの両方で正常に動作します。