patch - diff 出力を使用してファイルを変更する

形式

patch [–bceflNnRsv] [–B prefix] [–D symbol] [–d dir] [–F n] [–i patchfile] [–o outfile] [–p n] [–r rejectfile] [file]

説明

patch は、 古いテキスト・ファイルから新しいテキスト・ファイルへの変更を 記述する diff からの出力を含むパッチ・ファイルを読み取ります。patch は次にこれらの変更を、別のテキスト・ ファイル に適用します。一般的に、ファイルの並行バージョンを使用している 場合は、patch を使用します。1 つのファイルに一組の変更を行うとき 、patch を使用してこれらの同じ変更をファイルの別のバージョンに組み入れることができます。

オプション

–B prefix
オリジナル・ファイル のコピーをバックアップ・ファイルに保管します。バックアップ・ ファイル名は、オリジナル・ファイルの名前の前にストリング prefix が付いた ものです。この名前を持つファイルがすでにある場合は 、patch はこれを上書きします。同じファイルに複数のパッチが適用されるとき 、patch は最初のパッチのオリジナルだけをコピーします。–o outfile も指定すると 、patchprefixfile を作成しませんが、outfile がすでにある場合は 、prefixoutfile を作成します。
–b
オリジナル・ファイル のコピーをバックアップ・ファイルに保管します。バックアップ・ファイル名は、オリジナル・ファイルの名前に接尾部 orig が加えられたものです。この名前を持つファイルがすでにある場合は、patch はこれを上書きします。同じファイルに 複数のパッチが適用されるとき、patchfile orig だけを作成します。–o outfile も指定すると 、patchfile–.orig を作成しませんが、outfile がすでにある場合は、outfile.orig を作成します。
–c
パッチ・ファイルを context diff ファイル (–c または –C が指定されている場合は diff の出力) として解釈します。 このオプションは –e または –n と一緒に使用できません。
–D symbol
変更を C プリプロセッサー構成でマークします。
#ifdef symbol
      …
#endif

結果 (パッチされた) ファイルをコンパイルすると、symbol が 定義されていない場合はオリジナル・ファイルを得、symbol が 定義されている場合は変更したファイルを入手します。

–d dir
パッチを処理する前に、現行ディレクトリーを dir に 変更します。
–e
パッチ・ファイルを ed スクリプト (–e が指定されたとき の diff の出力) として解釈されます。このオプションは –c または –n と一緒に使用できません。
–F n
パッチをインストールする個所を検索するとき無視するコンテキスト diff の 行数を指定します。
–f
ユーザーからの追加情報を要求しないで 処理を強制します。
–i patchfile
ファイル patchfile からパッチ・ファイル情報を読み取ります。patchfile を指定しなかった場合、patch は標準入力から情報を読み取ります。
–l
パッチ・ファイルのブランクの任意のシーケンスを 入力ファイル のブランクの任意のシーケンスに一致させます。言いかえると 、patch は 2 行の違いがスペースだけの場合は、2 行を同等とみなします。
–N
すでに適用されているパッチをどれも無視します。デフォルトで 、patch はすでに適用したパッチをリジェクトします。
–n
パッチ・ファイルを通常 diff 出力として解釈します。このオプションは –c また は –e と一緒に使用できません。
–o outfile
パッチされた出力をオリジナルのファイルの代わりに 、outfile に書き込みます。複数のパッチを単一ファイルに指定すると、patch は 前のパッチで作成されたファイルの中間バージョンにパッチを適用 し、outfile に書き込まれるファイルの複数の 連結されたバージョンになります。
–p n
n コンポーネントを、パッチ・ファイルで検出された すべてのパス名の初めから削除します。パス名が絶対パス名 (つまり、スラッシュで開始する) の場合 は、patch は先行するスラッシュをパスの最初のコンポーネントとして 扱い、patch –p 1 は先行するスラッシュを削除します。–p 0 を指定して patch に、patchfile で 指定された絶対パス名を使用するよう伝えます。このオプションを指定しないと、patch は ベース名 (最終パス・コンポーネント) だけを使用します。
–R
パッチ・スクリプトのセンスを反転します。言いかえると、patch は パッチ・スクリプトが新しいバージョンを古いバージョンにする 変更を示すかのように作動します。パッチ・ファイルが ed スクリプト形式の場合 は、–R は使用できません。

–R で、patch は 変更を適用する前に、スクリプトに記録された 各変更を反転しようとします。patch はリジェクトされた差異を反転形式で保管します (これは、patch が正しく反転されたかどうかを 知るためリジェクトを検査できることを意味します)。

–r rejectfile
リジェクトをデフォルト・リジェクト・ファイル名の代わりに、ファイル rejectfile に記録します。
–s
patch に、エラーが起きるまでサイレントでいるよう伝えます。通常、patch は パッチ処理の結果情報を標準エラー (stderr) に書き込みます。
–v
patch のバージョン番号を表示し、終了します。

–b または –B オプションのどちらかを指定しない と、patch はオリジナルの file ディレクトリーを 変更しようとします。–c–e、または –n を指定しない と、patchdiff 出力のフォーマットを見て パッチ・ファイルが含む出力のタイプを判別します。

パッチされるファイルを指定しないで、patchfile が コンテキスト形式でない場合は、patch はパッチしたい ファイルの名前についてプロンプトを出します。

patchfile がコンテキスト形式の場合は、patch は その独自のファイル名を判別しようとします。コンテキスト・パッチ・フ ァイルの最初の 2 行は、diff が比較する新旧のファイルの名前を与えます。ファイルの 1 つだけが存在する場合、patch はそのファイルを パッチします。どちらも存在しないか、または両方とも存在する場合は、patch は、パッチするファイルの名前を問い合わせる前に、ストリング Index: で始まる行を検査します。両方のファイルが存在するが、いずれかが空である場合は、空のファイルがパッチされます。

patch は、パッチするファイルを決定した後、現行ディレクトリー内 にソース制御システム (SCCS) サブディレクトリーがあるか検査し、それが存在する場合は、ソース・コード制御システム (SCCS) コマンド get –e を実行して そのファイルの編集可能バージョンを入手しようとします。patch がパッチする ファイルを判別できない場合は、使用するファイルの名前を入れるようにプロンプトが出されます。

コンテキスト形式 patchfile では、patchpatchfile で 指定された行番号がパッチされるファイルの 行番号と一致しないとしても認めることができます。したがって、diff で使用された古いファイルに 一致しない行カウントを持つファイルをパッチすることができます。これを行うには、以下のステップをとります。

  1. 変更される各セクションで、patch はパッチ・ファイルで 検出された行番号に前のセクションで行われたはずの調整を 加減算して開始します。
  2. この位置の行がパッチ・ファイルの行と一致しない場合は、patch は一致しない行の 前方および後方を走査します。一致行が見つかったら、patch は、必要な変更を行うように進行します。patch は、また、一致行を検出するために行う必要があった調整 を記憶し、変更する次のセクションでこの調整を使用します。
  3. patch がパッチ・ファイルのものと一致する行を 検出できない場合は、コンテキストとして指定された行を使用して 行を検出しようとします。コンテキストの最初と最後の 2 行を無視して、再度検索を進めます。このとき一致が見つかると、変更を行い、調整を覚えます。
  4. 検索でコンテキストの最初と最後の行を無視した場合は、patch はコンテキストの最初の 2 行と最後の 2 行を無視して、もう一度検索します。一致が見つかると、変更を行い、調整を覚えます。
  5. patch がそれでも一致を検出できない場合は、一致しない部分をリジェクト・ファイル に書き込みます。その後、変更の次のセクションに進みます。このように、リジェクト・ファイル には patch が変更できないセクションが 含まれます。リジェクト・ファイルのセクションの行番号は、パッチ・ファイルのものとは異なる場合があります。これは patch が先行するセクションで計算した調整を使用して patch が これらを調整するためです。

いくつかのエクステントに対して、patch はパッチ・ファイルがコンテキスト形式ではなく 通常形式の場合は、同じ処理を行おうとします。このパッチ・ファイルにはコンテキスト情報が入って いないため、patch のこれに対する作用はより少なく、おそらくはより多くのリジェクトが作成されます。patch は 、patchfile 形式には関係なく、常に rejectfile を コンテキスト形式で書き込みます。

デフォルトでは、リジェクト・ファイルはオリジナルのファイル と 同じ名前をもち、接尾部 .rej が追加されます。–r を使用して、コマンド行に 別のリジェクト・ファイルを指定できます。リジェクト・ファイルがすでに存在する場合は、patch はこれを上書きします。

–R を指定しないと、patch は パッチ・ファイルが正常または反転できるという 前提事項で開始されます。このため、最初の変更がリジェクトされると、patch はこれが作動するかどうかを見るため変更を反転しようとします。 反転変更もリジェクトされると、patch は ファイルのその他の変更で継続し、前方と反転のどちらかが作動するまで両方向の変更を行おうとし ます。作動するのが前方への変更の場合は、patch は ファイルの残りに対して前方変更だけを試みます。作動するのが反転変更の場合は、patch は このことをメッセージで出し、すべての変更を反転として扱うかを質問します。しかし、コマンド行に –R オプションを指定した場合は、パッチ・ファイル内のすべての 変更が保持されると想定されます。

パッチ・ファイルは、いくつかの diff 比較からの出力を含むことができます。patch は、変更の各集合を別々のパッチ・ファイルとして 扱います。また、patch は、そのそれぞれについて、パッチしたいファイルの名前を入力するようにプロンプトを出すことができます。

ローカライズ

patch は、以下のローカライズ変数を使用します。
  • LANG
  • LC_ALL
  • LC_CTYPE
  • LC_MESSAGES
  • LC_TIME
  • LC_SYNTAX
  • NLSPATH

詳しくは、ローカライズを参照してください。

終了値

0
正常終了
1
1 つ以上のリジェクトがありました。
>1
エラーが発生。

移植性

POSIX.2 ユーザー移植性拡張, X/Open 移植性ガイド, UNIX システム.

–B–F–f–s、 および –v オプションは、POSIX 標準の拡張ではありません。

関連情報

diffed