概要
`diff -r`は、2つのディレクトリ構造とその中のファイルを比較して違いを特定します。ファイル内容の違いだけでなく、一方にのみ存在するファイルやディレクトリも報告します。
主な特徴
- 2つのディレクトリのファイルおよびサブディレクトリの再帰的な比較
- ファイル内容の違いの詳細な報告
- 一方にのみ存在するファイルまたはディレクトリの特定
- バージョン管理システム(VCS)での変更追跡に活用
主なオプション
`diff`コマンドのさまざまなオプションの中でも、特にディレクトリの再帰比較(`-r`)と共によく使用されるオプションです。
比較方法と出力
生成されたコマンド:
コマンドを組み合わせてみてください。
説明:
`diff-r` コマンドを実行します。
これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。
使用例
2つのディレクトリの内容を比較するさまざまな`diff -r`の活用例です。
2つのディレクトリの再帰比較
diff -r dir1 dir2
dir1とdir2ディレクトリのすべてのファイルとサブディレクトリを比較します。
再帰比較(簡潔な要約)
diff -rq dir1 dir2
違いのあるファイルのみをリストし、ファイル内容の詳細な違いは省略します。
新規ファイルも比較に含める
diff -rN dir1 dir2
一方にのみ存在するファイルを、もう一方では空のファイルとして扱って比較結果に含めます。
特定のファイル/ディレクトリの除外
diff -r --exclude='.git' --exclude='*.log' dir1 dir2
`.git`ディレクトリと`.log`拡張子を持つファイルを比較から除外します。
統合形式でパッチファイルを作成
diff -ru dir1 dir2 > changes.patch
2つのディレクトリの違いを統合形式で出力し、それを`changes.patch`ファイルとして保存します。このファイルは`patch`コマンドで適用できます。
ヒントと注意点
`diff -r`は強力なツールですが、大規模なディレクトリを比較する際は、パフォーマンスと出力結果の解釈に注意が必要です。
効率的な使用のヒント
- **パフォーマンスの最適化**: 大規模なディレクトリ比較の際は、`-q`(簡潔な出力)オプションを使用してファイル内容の詳細な違いの代わりに違いの有無のみを確認すると、比較速度を向上させることができます。
- **不要なファイルの除外**: `--exclude`オプションを活用して、バージョン管理システム(例: `.git`, `.svn`)、ビルド成果物(例: `*.o`, `*.pyc`)、ログファイル(例: `*.log`)など、比較する必要のないファイルやディレクトリを除外すると、比較速度を向上させ、出力結果のノイズを減らすことができます。
- **パッチファイルの作成**: `diff -ru dir1 dir2 > changes.patch`コマンドで生成されたパッチファイルは、`patch -p1 < changes.patch`コマンドで別のディレクトリに簡単に変更を適用できます。
- **バイナリファイル**: `diff`は基本的にテキストファイルに最適化されています。バイナリファイルの違いのみを確認するには`cmp`コマンドを使用するか、`diff`がバイナリファイルであることを検出すると「Binary files ... differ」のように出力します。