UNIX でディレクトリ内のファイル内容に特定の文字列が含まれているものを探す方法

UNIX でディレクトリ内の全てのファイルの内容から特定の文字列を grep したい場合は find で全てのファイルを再帰的に取り出して -print で出したパスをパイプで grep に渡すみたいです。というか説明の仕方あってますでしょうか。

1
find ./ -type f -print | xargs grep $1 /dev/null

これだと terminal 上に大量に結果が出て追えなくなることもありますので、ファイルに出力する場合は以下のコマンドで良いです。> で指定のファイルに上書き、>> で指定のファイルに追記だそうです。

1
find ./ -type f -print | xargs grep $1 > ~/Desktop/tmp/grep.log

ただこれを全て覚える、もしくは打つのは至難の技ですから以下のように気軽に使えるように関数にしてしまいました。これを .zshrc や .bashrc に記述すればいつでも気軽に grep できますね。

1
wb_grep() { find ./ -type f -print | xargs grep $1 > ~/Desktop/tmp/grep.log }

使い方としては grep したいディレクトリに移動してから wb_grep でキーワードを引数で渡せば良いです。

1
2
cd ~/Sites/example.com/www
wb_grep 'hoge'

追記: どうやら grep だけで解決できるようです

Twitter で egrep、fgrep、bzgrep、zipgrep などがあると教えて頂きました。

1
egrep -r 'hoge' ./ > ~/path/to/egrep.log

コメント

コメントは受け付けていません。