Diffを使用して、2つの場所のファイルとディレクトリが同じであることを確認したいのですが、ファイル自体の内容を比較しません。なぜなら、それが必要なすべてであり、通常のDiffはデータ量に比べて時間がかかりすぎるからです。どうすればいいですか?これを行うことができる他のDebian標準ツールはありますか?
答え1
これにはdiffを使用できません。 diffを使用する理由は何ですか?なぜ人々は可能な解決策を詳細に研究することなく常に急いで結論を下すのですか?
を使用できますが、diff -qr
唯一の目標が概要ディレクトリ構造を比較することであれば、パフォーマンスの面では賢明ではありません。ここ
この質問に対する答えの1つは
vimdiff <(cd dir1; find . | sort) <(cd dir2; find . | sort)
どの
共通部分が縮小された状態で、2つのディレクトリ階層を並べて表示する素晴らしい表示を提供します。
答え2
これについてコメントします。真希の答えしかし、長すぎました。彼の解決策には次の警告があります。
ls
解析またはfind
類似の出力です。強くないので壊れやすい。例は次のとおりです。
$ mkdir dir{1,2}
$ touch !$/file{1..5}
touch dir{1,2}/file{1..5}
$ mkdir dir1/$'\n'.
$ touch !$/whoops
touch dir1/$'\n'./whoops
$ touch dir2/whoops
$ touch dir1/onlyin1
$ touch dir2/onlyin2
$ comm <( cd dir1 ; find . | sort ) <( cd dir2 ; find . | sort )
.
.
./
./
./file1
./file2
./file3
./file4
./file5
./onlyin1
./onlyin2
./whoops
comm
(代わりに、より簡単にコピーして貼り付けることができるように、3方向のテキスト比較を使用しています。vimdiff
結果はと同じですvimdiff
。)
ご覧のとおり、whoops
実際には、ファイルの1つがwhoops
名前に改行文字を含むサブディレクトリにあり、ファイルが2つのディレクトリにあることを間違って表示します。dir1
通常、人々はファイル名やディレクトリ名に改行文字を追加しません。答えは次vimdiff
のとおりです。しなければならない他の特殊文字とも動作します(まだテストしていませんが)。しかし、これはまだ注意すべきことです。これをスクリプトやどのようなプロダクションコードに入れるには、2つのディレクトリツリーを正しくナビゲートして比較するなど、より強力な作業を実行します。