Bashシェルスクリプトで2つのディレクトリ内のファイル名のみを比較する(ファイルの内容の違いは許容)
はじめに
過去に以下のようなエントリを投稿しました。
今回は似ていますが、
存在するファイル名の違いを出力してみたいと思います。
ファイルの中身に違いがあっても差分として検出しません。
検証環境
検証のための事前準備
比較するための2つのディレクトリ dir1
と dir2
を作成し、いくつかのファイルを作成しておきます。
後ほどこの2つのディレクトリに含まれているファイル名を比較します。
tree
コマンドでそれぞれのディレクトリの階層構造を確認してみましょう。
2つのディレクトリに含まれているファイル名の違いを出力
すべてのファイルの内容も含めて2つのディレクトリを比較するときには、以下のエントリで取り上げたように diff -r dir1 dir2
で確認できます。
ただし今回は「ファイル名」のみの違いを確認したいので、少し異なった方法取ります。
dir1 には b/2.txt
と c/4.txt
、
dir2 には c/5.txt
があります。
それぞれのファイルが差異として検出されました。
dir1
と全く同じディレクトリの場合はどうなるでしょう?
何も出力されません。差異がなかったということです。
2つのディレクトリに含まれているファイル名に違いがあるかを判定
差異があるかどうかを判定したい(具体的なファイル名は必要ない)場合は、 cmp
コマンドが利用できます。
dir1
と全く同じディレクトリの場合はどうなるでしょう?
# dir1 をコピーして、全く同じ階層の dir3 を作成
$ cp -a dir1 dir3
$ cmp -s <(cd dir1; find . -type f | sort) <(cd dir3; find . -type f| sort) && echo "差異なし" || echo "差異あり"
差異なし
ひとこと
2つのディレクトリの中の「ファイル名」だけを比較するというケースはあまりしたことがありませんが、バイナリデータを含むファイルの比較などで便利そうですね。
ディスカッション
コメント一覧
まだ、コメントがありません