- 履歴一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- シェル/特定の文字列を含むファイルを探す へ行く。
- 1 (2014-12-23 (火) 04:36:47)
キーワード†
- find
- grep
したいこと†
ファイルの中身に特定の文字列を含むファイルを探してリストします。
どうやって†
たとえば「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