10.7 別ディレクトリでのパッチ適用

patchの--directory=directory(-d directory)オプションは、パッチファイル内のファイル名と、他のオプション(-Bや-oなど)の引数のファイル名の両方を解釈する際、directoryをカレントディレクトリにします。たとえばメールを読んでいるとき、パッチを含むメッセージから/usr/src/emacsディレクトリ内のファイルへ、次のように直接適用できます。

| patch -d /usr/src/emacs

パッチ内の名前に先行ディレクトリが含まれていても、手元では別のディレクトリにファイルを置いていることがあります。その場合は--strip=number(-pnumber)オプションで、ファイル名の除去数をnumberに設定できます。除去数は、名前の先頭からスラッシュとその間のディレクトリ名をいくつ取り除くか、patchに伝えます。連続する1個以上のスラッシュは1個と数えます。既定ではpatchは先行ディレクトリをすべて除き、ベース名だけを残します。

たとえばパッチ内の名前が/gnu/src/emacs/etc/NEWSなら、-p0では名前全体を変更せず、-p1ではgnu/src/emacs/etc/NEWS(先頭のスラッシュなし)、-p4ではetc/NEWSになります。-pをまったく指定しなければNEWSになります。

patchはスラッシュの除去後の各ファイルを、カレントディレクトリ、または-d directoryオプションで指定したディレクトリから探します。