キーワード

したいこと

ファイルの中身に特定の文字列を含むファイルを探してリストします。

どうやって

たとえば「HOGE」を含む「.txt」ファイルを探す場合次のようにします。

$ find . -name "*.txt" -exec grep -q HOGE {} \; -print

または次のようにすることもできます。

$ find . -name "*.txt" | xargs grep -l HOGE

ノート

-execする方法

次のようにすると「.txt」ファイルを -exec オプションで grep できます。出力結果は grep の出力結果と同じです。つまりファイル名ではなくファイルの中身です。

$ find . -name "*.txt" -exec grep HOGE {} \;

それでは困るので -print オプションをつけて次のようにしてみます。

$ find . -name "*.txt" -exec grep HOGE {} \; -print

すると先の出力結果に加えてファイル名を出力ます。これは -print オプションが -exec の評価を受け取ってファイル名を出力するからです。

ここで grep に -q オプションをつけると grep の出力を省略できます。

$ find . -name "*.txt" -exec grep -q HOGE {} \; -print

xargsする方法

次のように xargs を使うと「.txt」ファイルをパイプを経由して grep できます。出力結果はやはり grep の出力結果と同じです。

$ find . -name "*.txt" | xargs grep HOGE

それではこまるので grep に -l オプションをつけるとファイル名を出力できます。

$ find . -name "*.txt" | xargs grep -l HOGE

参考

Last-modified: 2014-12-23 (火) 13:43:19 (1734d)