grepで複数のディレクトリを検索対象から排除

grepといえば”Global Regular Expression Print”の略語ですが、
すでに一般動詞と化しています。
って、そう思ってる人の範囲は結構限られてはいますが。
まあHDD等に置かれたファイルの中で、
特定の文字列を含んでいる物を抽出する、
UNIXにおける全文検索のコマンドです。

一般的には

$ cd <検索対象ディレクトリ>
$ grep -rn '<検索文字列>' *

で、<検索対象ディレクトリ>yori
深いところにあるすべてのファイルから、
<検索文字列>を含むファイルとその行を
一覧表示させたりします。

もし検索対象ディレクトリの中に検索対象として
含ませたくないディレクトリがあるような場合は

$ grep -rn --exclude-dir=<検索非対象ディレクトリ> '<検索文字列>' *

と指定することで排除が可能です。
例えばソフトウェアのソースコード内を検索する際に、
コンパイル等で生成されたオブジェクトファイルを排除したい場合など、
この手の検索は結構使いどころがあります。

ここまでは私もよく使っていたのですが、
最近試行錯誤していて新発見をしました。
なんと”–exclude-dir=”オプションは複数つけられ、
検索対象外にしたいディレクトリが複数あっても対応できるんですね。
例えば

$ grep --exclude-dir=test --exclude-dir=sample '<検索文字列>' *

とすることで”test”ディレクトリと”sample”ディレクトリの両方を
検索対象から外すことができます。
個数に上限があるかもしれませんが、
とりあえず5個まで試しても問題ないようで十分実用的です。

なお、grepのバージョンによっては動作しない
可能性もありますが、そこはご容赦を。