一方のディレクトリに存在し、他方のディレクトリに存在しないファイルの検索

あるディレクトリには存在するが、他のディレクトリには存在しないファイルを見つけようとしているので、このコマンドを使ってみました。

diff -q dir1 dir2

上記のコマンドの問題点は、dir1にあってdir2にないファイルと、dir2にあってdir1にないファイルの両方を見つけてしまうことです。

私は dir1 にあって dir2 にないファイルだけを見つけようとしています。

以下は、私のデータがどのようなものかの小さなサンプルです。

dir1    dir2    dir3
1.txt   1.txt   1.txt
2.txt   3.txt   3.txt
5.txt   4.txt   5.txt
6.txt   7.txt   8.txt

もうひとつの疑問は、dir1にあってdir2dir3にはないファイルを、ひとつのコマンドで見つけるにはどうしたらよいかということです。

ソリューション
diff -r dir1 dir2 | grep dir1 | awk '{print $4}' > difference1.txt

説明:

  • diff -r dir1 dir2` は、dir1 にのみ存在するファイルと dir2 にのみ存在するファイルを表示し、両ディレクトリに存在するファイルに変更があれば、その変更点も表示します。

  • diff -r dir1 dir2 | grep dir1` は、dir1にのみ存在するファイルを表示します。

  • ファイル名だけを表示するにはawkを使用します。

解説 (2)

vim'のDirDiffプラグインは、ディレクトリを比較するための非常に便利なツールです。

vim -c "DirDiff dir1 dir2"

DirDiff はディレクトリ間でどのファイルが異なるかをリストアップするだけでなく、 vimdiff で異なるファイルを検査/修正することができます。

解説 (0)