ファイル内を検索するとき、サブディレクトリも含めて検索するときはgrepコマンドでオプション(-r)を使います。
しかし、ふつうの検索で使えるものが再起検索では使えないなど、知っておかないと『なんでできないの?』とあせってしまいます。
grepの再帰検索のポイントを説明します。
再帰検索のディレクトリ指定はパターンが使えない
grep -r search-string [dir | file]
ここで大事なのが、オプション-rを使った再帰検索のとき、指定するディレクトリはパターンが使えません。
*tmp
proc*
など。指定できるのは、ディレクトリ名の完全名かアスタリスク(*)ひとつです。
アスタリスクを指定すると、カレントディレクトリ下すべてを検索対象にします。
なぜ、パターンが指定できないのでしょうか?『いや、使えるよ!』と思うでしょう。
でもgrepの仕様は、ふつうのgrep検索では使えるけど、再起検索では使えないです。
再帰検索で指定するディレクトリは、検索するトップディレクトリを指定する必要があるため、あいまいな指定は許されません。
それなら、次のような再帰検索はできないのか? と思うかもしれません。
grepコマンドには、そのオプションが用意されています。
ファイル・ディレクトリの検索条件をつけたり、たとえば除外設定などができます。
ひとつひとつ見ていきましょう。
パターンにマッチするファイルだけ検索する
grep -r search-string [dir | file] --include=[pattern]
たとえば、PHPのソースファイルだけを検索したかったら、
--include=*.php
を指定します。
パターンにマッチするファイルを除外して検索する
grep -r search-string [dir | file] --exclude=[pattern]
たとえば、テンポラリファイルを検索対象からはずしたいときは、
--exclude=*.tmp
を指定します。
パターンにマッチするディレクトリを除外して検索する
grep -r search-string [dir | file] --exclude-dir=[pattern]
たとえば、binディレクトリを検索対象からはずしたいときは、
--exclude-dir=bin
を指定します。
除外設定ファイルを読み込んでから検索する
grep -r search-string [dir | file] --exclude-from=[config file]
ファイルパターンを設定ファイルにまとめることもできます。
*.txt
*.dat
*.tmp
条件を複数指定する
これらのオプションは同時に指定することもできます。また、複数の条件も指定できます。
複数の条件を指定するときは、
--include={.php,.txt}
のように、カンマで区切って中括弧でかこって指定します。
- オプション(-r)を使う
- 再帰検索の場合、指定するディレクトリにパターンは使えない
- 対象を限定したり除外したい場合はオプション(--include, --exclude)を使う。