🤗
差分の有無だけを確認するならcmpコマンドを使おう
2つのファイルに差分があるかないかで条件を分けたいときは結構あります。 その時にcmp
コマンドが便利でした。
cmpコマンド
cmp
は単純に2つのファイルを比較し、それが同一かどうかを判断するコマンドです。
diff
は差分を表示することが主目的であることに対して、 cmp
は差分があるかないかの確認が主目的です。 よって、差分があることが判明したところで処理が終了します。
大きなファイルを対象とした場合、 diff
では先頭付近で差分があっても最後まで処理が続いてしまいます。
diff a b | head -1
のように1行でも差分が見つかったところで処理を終了させる方法はありますが、 cmp
を使った方がより直接的に目的を達成できます。
少なくともmacではデフォルトでインストール済み
macOSでは/usr/bin/cmp
にデフォルトでインストールされていました。
if文での分岐での利用例
2つのファイルに差分があるかないかで条件を分岐させるシェルスクリプトはこうなります。
if cmp -s a b; then
#ファイルが同一の時の処理
else
#ファイルが異なる時の処理
fi
-s
オプションをつけると一切出力が出ず、終了コードだけを用いることができます。 終了コードは
- 0: 2ファイルが同一である
- 1: 2ファイルに違いがある
となっているようです。
まとめ
ファイルの変更有無で処理を分けたい場合cmp
コマンドが有効であることがわかりました。 これまでhead -1
のようにすぐに終わらせる処理を自分で書いて頑張ってきましたが、 こんな便利なコマンドまで用意されているんですね。
以上、誰かの参考になれば幸いです。
Discussion
/usr/bin/cmp
ですかね (?)ご指摘ありがとうございます!修正しました!