実際にファイル内のデータを比較せずに2つのディレクトリ構造を比較するための最良かつ最も簡単な方法は何ですか?これはうまくいきます:
diff -qr dir1 dir2_
ただし、ファイルの比較も行うため、非常に時間がかかります。これを行うためのdiffまたは別の簡単なcliツールのスイッチはありますか?
次の場合(最初のディレクトリをdirectory1に、2番目のディレクトリをdirectory2に置き換えた場合)は、探していることをすばやく実行できます。
find directory1 -type d -printf "%P\n" | sort > file1
find directory2 -type d -printf "%P\n" | sort | diff - file1
基本的な原則は、ベースのdirectoryNディレクトリに対する相対サブディレクトリパスを含むすべてのディレクトリを出力することです。
一部のディレクトリ名にキャリッジリターンがあり、他のディレクトリ名にキャリッジリターンがない場合、これは失敗する可能性があります(奇妙な出力が生成されます)。
vimdiff <(cd dir1; find . | sort) <(cd dir2; find . | sort)
共通セクションが折りたたまれた2つのディレクトリ階層を並べて表示します。
通常、このタスクにはrsync
を使用します。
rsync -nav --delete DIR1/ DIR2
非常に注意してください常に-n
、別名--dry-run
、オプションを使用するか、オプションを同期(内容を変更)しますディレクトリ。
これは、ファイルの変更時間とサイズに基づいてファイルを比較します... Ithinkそれが本当に欲しいものです、または少なくともそれが気になっていませんあれ?ファイルの内容の違いを無視する必要はなく、速く発生させたいという感覚を得ました。同じ名前の異なるファイルをリストしないようにしたい場合は、--ignore-existing
オプションを追加するとそうなると思います。
また、/
をDIR1
の最後に配置しないと、ディレクトリーDIR1
とが比較されることに注意してください。 DIR2
の内容。
出力は少し冗長になりますが、どのファイル/ディレクトリが異なるかが表示されます。 DIR2
ではなくDIR1
にあるファイル/ディレクトリの前には、Word deleting
が付けられます。
状況によっては、@ slartibartfastの回答がより適切な場合がありますが、ディレクトリ以外のファイルのリストを有効にするには、-type d
オプションを削除する必要があります。比較するファイル/ディレクトリの数が多い場合、rsync
はより高速になります。
Lsの回答に似ていますが、treeをインストールすると、次のことができます
tree dir1 > out1
tree dir2 > out2
diff out1 out2
私はこの問題の解決策を探していました。私が最も気に入った解決策は:
comm <(ls DIR1) <(ls DIR2)
それはあなたに3つの列を与えます:1-DIR1のみのファイル、2-DIR2のみのファイル、3-DIR3のみのファイル詳細については、これを見てください ブログ投稿
これは最適なソリューションです
diff --brief -r dir1 dir2
--briefスイッチは、ファイルの違いのみを報告し、違いの詳細は報告しません。
ls > dir1.txt
ls > dir2.txt
次に、2つのリストを比較します。
これは、一致すると予想されるツリーで欠落しているファイルを見つけるという特定のニーズに役立ちました。
diff <( cd dir1; find * |sort ) <(cd dir2; find * | sort)
"diff -qr"を使用して異なるファイルを取得し、grepを使用してファイル比較を除外して、ディレクトリの1つにのみ存在するファイル名のみを取得します。
diff -qr dir1 dir2 | grep -v "Files.*differ"