Next: , Previous: Incomplete Lines, Up: Top


4 ディレクトリの比較

二つのディレクトリツリーでファイルのいくつかまたはすべてを比較するために, diffを使用することが可能です.diffへの引数が両方とも ディレクトリのとき,両方のディレクトリに含まれているそれぞれのファイルを, LC_COLLATEロケールカテゴリで指定されているように,アルファベット順 に比較します.通常diffは,差異の無いファイルの組に対しては何も 出力しませんが,-s--report-identical-filesオプション を使用している場合,同一ファイルの組も報告します.通常diffは, サブディレクトリの比較を行なわず,両方のディレクトリに共通のサブディレク トリについて報告しますが,-r--recursiveオプションを 使用している場合,可能な限り深いレベルまで,ディレクトリツリーの対応する ファイルの組ごとに比較をします.

一方 のディレクトリだけにあるファイル名に対して,diffは通常, 存在するファイルの内容を表示しません.ファイルがディレクトリに存在し,も う一方には存在しないことだけを報告します.実際に存在するファイルの内容全 部を出力するように,もう一方のディレクトリにファイルは存在するが空のファ イルであるかのように,diffに動作させることも可能です.(該当す るものが最初または二番目のディレクトリにあるかどうかに依存して,挿入また は削除として出力します.)こうするために,-N--new-fileオプションを使用してください.

古いディレクトリに一つ以上の大きなファイルがあり,新しいディレクトリには 無い場合,-Nの代わりに--unidirectional-new-fileを使用 することで,パッチをより小さくすることが可能です.このオプションは -Nに似ていますが,最初のディレクトリには無く二番目ディレクトリ にあるファイル(すなわち,追加されたファイル)の内容だけを挿入します.パッ チの最初に,ユーザが適用するパッチで,パッチを適用する前に削除されたファ イルを削除するように命令を書いてください.配布物へのパッチを作成する議論 は,See Making Patches.

ディレクトリを比較している間にいくつかのファイルを無視するために, -x pattern--exclude=patternオプションを 使用してください.このオプションで,シェルのパターンpatternにマッ チするベース名のファイルやサブディレクトリを無視します.シェルとは異なり, ファイル名のベースの最初のピリオドはパターンの最初のワイルドカードにマッ チします.シェルが展開しないように,patternを引用符で囲むべきです. 例えば,オプション-x '*.[ao]'で,‘.a’や‘.o’で終る名前 のファイルを無視します.

このオプションは一回以上指定した場合は累積されます.例えば,オプション -x 'RCS' -x '*,v'を使用することで,ベース名が‘RCS’または ‘,v’で終るファイルやディレクトリを無視します.

このオプションを何回も与える必要がある場合,その代わりにパターンをファイ ルに書き,-X file--exclude-from=fileオプ ションを使用することが可能です.

二つのディレクトリを比較していて途中で停止した場合,その後で残りを続けた いこともあるでしょう.-S file--starting-file=fileオプションを使用することで,それが可 能です.これで,最上位レベルのディレクトリで,ファイルfileとアルファ ベット順でそれ以降のファイルだけを比較します.

二つのディレクトリで,ファイル名が一方のディレクトリでは小文字で,もう一 方では大文字になっているという差しかない場合,diffは通常,大文 字小文字を区別してファイル名を比較するので,多くの差異を報告します. --ignore-file-name-caseオプションを用いると,例えば一方のディレ クトリのファイルTaoの内容と,もう一方のファイルTAOの内容を 比較するように,diffはファイル名の大文字小文字を無視します. --no-ignore-file-name-caseオプションで, --ignore-file-name-caseオプションの効果を停止し,デフォルトの動 作に戻ります.

--ignore-file-name-caseが効果があるときに,-x pattern--exclude=pattern-X file, または--exclude-from=fileオプションが指定されている場合, 指定されているパターンにマッチしたファイル名を除外するとき,大文字小文字 を無視します.