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 |
コメント