割とでっかいプロダクトをいじってて、そのプロジェクトのトップディレクトリでgrep -R hoge ./* とかしたいとする。
んでgrepしたいんだけども、単にgrepするとtest用のコードだとか.svnなんとかが引っかかってイヤンなことになる。
こういう場合どうするかってえと、
grep hoge | grep -v -E (svn|test)
とか?
んで、毎回こういうの打つのもめんどいんで、これにaliasかける、とか。
findとかでもいけるかもしれない。
で、こういうのって結局プロジェクトごとに無視したいファイルがあるんじゃね?ということで、.gitignoreみたいなファイルが実行ディレクトリにあれば、そこに書いてある正規表現にマッチするファイル名をもつファイルに関しては無視してくれるgrepがあればいいんじゃね?
と、思った。
ので、ものすごく適当に作った。のがこれ。↓
http://github.com/zentooo/IgnoreGrep
インストールすると、前述の動作を行うigというコマンドがインストールされる。システムにそんなもんインストールしたくない!という人はscripts/igを適当な所に入れてpath通して下さいまし。
中身は見れば分かるが、カレントの.grepignoreを読んで、それがなければhome以下の.grepignoreを読んで、最終的に grep -R original_args ./* | grep -v -E (regexp1|regexp2|regexp3|...)してるだけ。
.grepignoreの書式はこう。
svn test # comment regexp?
こんなのPerlで書いてもRubyで書いてもPythonで書いても何で書いても同じようなもんだけど、OSへのプリインストールという点でPerl。
CPANモジュール等に依存しない代わりに、grepがインストールされていて$PWDやら$HOMEやらにちゃんと値が入っている環境前提。その辺は、「そもそもgrepを使いたい環境」とイコールなのでよしとする。
「そんなでかいプロジェクトはgrepとか使わずにIDEで検索しろよ」とかそんな無粋なことは言っちゃダメ。
こんなツール作らなくてもコマンドラインでもっと簡単に同じことを実現できる方法、ないかなあ。