このページの内容

2.1.6 ファイルとディレクトリーの選択

-a
--text

バイナリーファイルをテキストとして処理します。「--binary-files=text」オプションと同じです。

--binary-files=type

ファイルのデータやメタデータから、バイナリーデータを含むと判断できる場合、そのファイルの種類をtypeとみなします。テキストでないバイトはバイナリーデータを示します。これには、現在のロケールで不正な符号化となる出力バイト(「環境変数」を参照)と、-z(--null-data)オプションを指定していない場合のNUL入力バイト(「その他のオプション」を参照)があります。

既定ではtypeは「binary」です。grepは、NULを含むバイナリー入力データが見つかった後の出力と、不正に符号化されたデータを含む出力行を抑制します。出力を一部抑制した場合、grepは、出力に続けて、バイナリーファイルが一致したことを示すメッセージを標準エラー出力へ表示します。

typeが「without-match」の場合、grepは入力ファイル内でNULを含むバイナリーデータを見つけると、未処理の入力は一致しないとみなします。これは-Iオプションと同じです。この場合、未処理領域の開始位置は、遅くともそのNULを含むバイナリーデータの位置であり、そこからファイル末尾まで続きます。

typeが「text」の場合、grepはバイナリーデータをテキストとして処理します。これは-aオプションと同じです。

typeが「binary」の場合、grepは-z(--null-data)オプションがなくても、テキストでないバイトを行の終端として扱う場合があります。このため、「binary」と「text」のどちらを選ぶかで、パターンがファイルに一致するかどうかが変わることがあります。たとえば、typeが「binary」の場合、パターン「q$」は、NULバイトが直後に続く「q」に一致することがあります。typeが「text」の場合は一致しません。逆に、typeが「binary」の場合、パターン「.」(ピリオド)はNULバイトに一致しないことがあります。

入力がバイナリーかどうかを推測するgrepのヒューリスティックは、grep固有のものです。コマンドラインオプション、ロケール、システムのページサイズや入力バッファリングなどのハードウェア・OSの特性に依存するため、ほかの用途には適さないことがあります。たとえば、一致するテキスト行の後ろに、NULバイトを含む一致しないデータが続く入力の場合、未処理部分にその一致するテキスト行が含まれるかどうかによって、grepは一致行を出力する場合も、ファイルをバイナリーとして扱う場合もあります。

警告: -a(--binary-files=text)オプションは、バイナリーの不正な表示データを出力する場合があります。出力先が端末で、端末ドライバーがその一部をコマンドとして解釈すると、好ましくない副作用が生じるおそれがあります。一方、文字符号化が不明なファイルを読む場合は、一致する箇所をより多く見つけるために、-aを使ったり、環境で「LC_ALL='C'」を設定したりすることが役立ちます。ただし、その一致箇所を直接表示するのは安全でない場合があります。

-D action
--devices=action

入力ファイルがデバイス、FIFO、ソケットの場合、actionに従って処理します。actionが「read」の場合、すべてのデバイスを通常ファイルと同様に読み込みます。actionが「skip」の場合、デバイス、FIFO、ソケットを通知せずにスキップします。既定では、デバイスをコマンドラインで指定した場合、または-R(--dereference-recursive)オプションを使う場合は読み込みます。再帰的な検索中に見つかり、-r(--recursive)オプションを使う場合はスキップします。標準入力経由で読むファイルには、このオプションは効果がありません。

-d action
--directories=action

入力ファイルがディレクトリーの場合、actionに従って処理します。既定のactionは「read」で、通常ファイルと同様にディレクトリーを読み込みます。一部のOSやファイルシステムではこれが許されず、grepが各ディレクトリーについてエラーメッセージを表示するか、通知せずにスキップします。actionが「skip」の場合、ディレクトリーを通知せずにスキップします。actionが「recurse」の場合、grepは各ディレクトリー配下の全ファイルを再帰的に読み込みます。コマンドラインで指定されたシンボリックリンクはたどり、それ以外はスキップします。これは-rオプションと同じです。

--exclude=glob

コマンドラインで指定したファイルのうち、名前の末尾部分がパターンglobに一致するものを、ワイルドカード照合でスキップします。ここで名前の末尾部分とは、名前全体か、名前内のスラッシュ(「/」)直後のスラッシュ以外の文字から末尾までの部分です。再帰検索では、ベース名がglobに一致する配下のファイルをスキップします。ベース名とは最後のスラッシュの後ろの部分です。パターンでは「*」、「?」、「[」…「]」をワイルドカードとして使い、\でワイルドカードやバックスラッシュを文字どおりに扱えます。

--exclude-from=file

fileから読み込んだいずれかのパターンに名前が一致するファイルをスキップします。ワイルドカード照合は、--excludeで説明した方法を使います。

--exclude-dir=glob

コマンドラインで指定したディレクトリーのうち、名前の末尾部分がパターンglobに一致するものをスキップします。再帰検索では、ベース名がglobに一致する配下のディレクトリーをスキップします。globの末尾にある余分なスラッシュは無視します。

-I

バイナリーファイルを、一致するデータを含まないものとして処理します。「--binary-files=without-match」オプションと同じです。

--include=glob

名前がglobに一致するファイルだけを検索します。ワイルドカード照合は--excludeで説明した方法を使います。--includeと--excludeの指定が矛盾する場合、最後に一致したものを優先します。--includeと--excludeのどちらにも一致しないファイルは、最初のその種のオプションが--includeでない限り、対象に含めます。

-r
--recursive

各ディレクトリー引数について、その配下の全ファイルを再帰的に読み込み、処理します。コマンドラインで指定されたシンボリックリンクはたどりますが、再帰的な検索中に見つかったものはスキップします。ファイル引数を指定しない場合、grepは作業ディレクトリーを検索します。「--directories=recurse」オプションと同じです。

-R
--dereference-recursive

各ディレクトリー引数について、その配下の全ファイルを再帰的に読み込み、すべてのシンボリックリンクをたどって処理します。