【コマンド詳細】diffコマンドの使い方とオプションまとめ

  • URLをコピーしました!
目次

diff コマンドとは?

diffコマンドは、ファイルやディレクトリの内容を比較し、違いを表示するツールです。
比較結果をテキストとして出力するため、コードの変更点や設定ファイルの違いを確認する際に役立ちます。

主に以下の用途で使用されます:

  • 設定ファイルの差分確認
  • コードの修正点の確認
  • バックアップや複製ファイルの変更点の検証

コマンド構文

diff [オプション] ファイル1 ファイル2
またはディレクトリ比較の場合:
diff [オプション] -r ディレクトリ1 ディレクトリ2
  • ファイル1、ファイル2: 比較対象の2つのファイル。
  • ディレクトリ1、ディレクトリ2: 比較対象の2つのディレクトリ。

主なオプション一覧

オプション説明
-c差分をコンテキスト形式で出力
-u差分をユニファイド形式(Gitなどで使われる形式)で出力
-i大文字と小文字を区別しない
-rディレクトリ比較を再帰的に実行
-qファイルやディレクトリの違いを簡易的に表示(変更点は詳細に表示しない)
-s同一のファイルも「同じ内容」として出力
-yサイドバイサイド形式(左右並べて比較)で出力
–suppress-common-linesサイドバイサイド形式で、差異がない行を非表示

使用例と出力結果

1. 基本的なファイルの差分確認

例: 2つのファイルの差分を比較
diff file1.txt file2.txt
出力例:
3c3
< Hello World
---
> Hello Linux
解説
  • 3c3 は「3行目を変更する」という意味。
  • < は元のファイル(file1.txt)の内容を示し、> は比較対象の内容(file2.txt)を示します。

2. ユニファイド形式で出力

例: Gitでよく使われる形式で出力
diff -u file1.txt file2.txt
出力例:
--- file1.txt  2024-11-30 10:00:00
+++ file2.txt  2024-11-30 10:01:00
@@ -1,3 +1,3 @@
 Line 1
 Line 2
-Hello World
+Hello Linux
解説
  • --- は元のファイル、+++ は比較対象を示します。
  • @@ 行には変更箇所の範囲が記載されます。

3. 大文字・小文字を無視して比較

例: 大文字小文字の違いを無視する
diff -i file1.txt file2.txt
解説

-i オプションにより、「Hello」と「HELLO」の違いを無視します。

4. ディレクトリの比較

例: ディレクトリ全体を再帰的に比較
diff -r dir1 dir2
出力例:
Only in dir1: unique_file.txt
Files dir1/common_file.txt and dir2/common_file.txt differ
解説
  • Only in dir1 は、dir1にのみ存在するファイルを示します。
  • Files ... differ は異なる内容のファイルを示します。

5. サイドバイサイド形式で比較

例: 左右に並べて比較
diff -y file1.txt file2.txt
出力例:
Line 1                      Line 1
Hello World           |     Hello Linux
解説
  • 差異は|記号で表示されます。視覚的に見やすくなるため、簡単な比較には便利です。

応用例

1. 差分をHTML形式で出力

例: colordiffで視覚的に差分を表示
diff -u file1.txt file2.txt | colordiff
解説

colordiffを使用することで、変更箇所を色分けして表示できます(別途インストールが必要)。

2. 差分結果をパッチファイルに保存

例: 差分をパッチファイルとして保存
diff -u original.txt modified.txt > changes.patch
解説

生成したパッチファイルを使って、patchコマンドで元のファイルに変更を適用できます。

3. バイナリファイルの比較

例: バイナリファイルの簡易比較
diff -q binary1.bin binary2.bin
解説

-q オプションにより、バイナリファイルが異なるかどうかを確認できます。詳細な差分は出力されません。

注意点

  1. ファイルの整形に注意
    diffコマンドは、空白や改行の違いも差分として検出します。事前に整形ツール(例: sed, awk)を使って内容を揃えると便利です。
  2. 大規模な差分には適していない
    巨大なファイルやディレクトリを比較する際は、より効率的なrsyncやバージョン管理システム(Gitなど)を検討してください。
    目次