知っておくとちょっと便利!2つのファイルを比較する diff コマンド

★★★ Live配信告知 ★★★ぜひお申込みください!
◆◇世界一わかりみの深いクラウドネイティブ on Azure◆◇
7/7(木) 19:00~ 第15回:クラウド上でのライブ配信環境〜OBS on Azureで高速・堅牢なライブ配信環境を作る〜 今回は、クラウドなライブ配信環境の構築方法をお届けします。
◆◇PS Live◆◇
7/15(金) 17:00~ 第18回:アウトプットはイイぞ 〜サイオステクノロジーLT大会〜 エンジニア初級者向けから、個人ネタまで、エンジニア脳を体感できるプログラムです。

今号では、2つのファイルの内容を比較する diff コマンドの使い方やオプションについてご紹介します!

diff コマンドとは

diff コマンドは、2つのファイルやディレクトリの内容を比較し、異なる箇所 (差分) を出力します。
私たちは日頃の業務で、バージョンごとのソースコードの差分を確認したり、お客様から提供いただいた設定ファイルがデフォルトからどのように変更されているかを確認する事に使用しています。
また、ただ差分を確認するだけではなく、差分の表示形式を変更したり、比較する際の詳細な条件を指定する事もできます。

基本の書式

diff コマンドの基本の書式は以下の通りです。
(必要に応じて) オプションを指定した後に、比較する 2つのファイルを指定します。

  • 2つのファイルの内容に差分がない場合
    ファイル1とファイル2の内容が同じである場合は、何も表示されません。
  • 2つのファイルの内容に差分がある場合
    ファイル1とファイル2の内容が異なる場合は、以下のような出力結果となります。
    結果に表示されている 3c3 は、ファイル1の 3行目の内容が、ファイル2の 3行目の内容に変更されている事を意味します (cは change のc)。
  • 2つのファイルの内容に差分がある場合 (行が存在しない場合)
    ファイル2で特定の行が存在しない (削除されている) 場合は、以下のような出力結果となります。
    結果に表示されている 3d2 は、ファイル2ではファイル1の 3行目に該当する箇所が削除され、2行目の直後まで詰まった事を意味します (dは delete のd)。
  • 2つのファイルの内容に差分がある場合 (行が追加されている場合)
    ファイル2にのみ特定の行が存在する (追加されている) 場合は、以下のような出力結果となります。
    結果に表示されている 2a3 は、ファイル2ではファイル1の 2行目の直後に3行目が追加された事を意味します (aは append のa)。

便利な diff コマンドのオプション

diff コマンドに様々なオプションを付けることによって、結果の出力形式を変更することができます。
出力形式を変更するオプションはたくさんありますが、今回は知っておくと便利なオプションを抜粋してご紹介します。

  • ファイルに差異があるかの結果のみを表示する
    -q オプションを指定すると、ファイルに差異がある箇所は出力せず、ファイルに差異があるかの結果のみを表示します。
    ※2つのファイルに差異がない場合は、何も表示しません。

  • 結果を横並び (2列) で表示する
    -y オプションを指定すると、ファイルの差異を横並び (2列) で表示します。
    ※2つのファイルに差異がない場合でも表示します。

ディレクトリ同士を比較する場合

diff コマンドではファイルだけでなく、ディレクトリ同士を比較することができます。
その場合、ファイルを指定した場合とは異なり同じファイル名のファイル同士を比較します。

以下の例ですと、2つのディレクトリ (dir1、dir2) に上の例で使用した text1~4.txt をコピーしました。
その上で、dir2 の text3.txt のみ内容を変更し、また text4.txt を dir2 のみに配置しました。

diff コマンドを実行した結果、text3.txt のみ差異がある箇所を表示し、また text4.txt は dir2 のみに存在する旨を表示しています。





ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!


ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

Be the first to comment

Leave a Reply

Your email address will not be published.


*