次のコマンド (最初のディレクトリを 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
、オプション、またはディレクトリを同期 (内容を変更) します。
これにより、ファイルの変更時間とサイズに基づいてファイルが比較されます... 思う それがあなたが本当に望んでいることですか、それとも少なくともそうしてもかまいませんか? もっと速くしてほしいと思っているだけのように感じました ファイルの内容の違いを無視する必要があるわけではありません。同じ名前の異なるファイルをリストしたくない場合は、 --ignore-existing
を追加すると思います オプションはそれを行います。
/
を入れないことにも注意してください DIR1
の終わりに ディレクトリを比較します DIR1
内容 DIR2
の .
出力は少し冗長になりますが、どのファイル/ディレクトリが異なるかがわかります。 DIR2
に存在するファイル/ディレクトリ DIR1
ではありません deleting
という単語で始まります .
状況によっては、@slartibartfast の回答の方が適切かもしれませんが、-type d
を削除する必要があります。 ディレクトリ以外のファイルのリストを有効にするオプション。 rsync
比較するファイル/ディレクトリの数が多い場合は、より高速になります。