• ベストアンサー

linux(UNIX) の grep で、あるディレクトリ以下を再帰的に見て、全ての *.html ファイルに grep をかける方法

linux(UNIX) の grep で、あるディレクトリ以下を再帰的に見て、全ての *.html ファイルに grep をかける方法を教えてください。 簡単な事なのかもしれませんが、コマンドから打つ場合、どのようにすればよいか、分かりません。 Windows の秀丸のgrepなら簡単に出来るのですが。。。 どなたか教えてくださいませ。。。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

例えば grep pattern `find あるディレクトリ -iname *.html`

michiko_
質問者

お礼

回答ありがとうございます! できました。なのですが、私のやろうとした場合だと、find結果のファイルが多すぎて、grep を実行しようとするところでエラーになってしまいました。 なので、 find あるディレクトリ -iname "*.html" -exec grep -Hn pattern {} \; としてみたら、うまくいきました。ありがとうございました。

その他の回答 (3)

  • entree
  • ベストアンサー率55% (405/735)
回答No.4

grep pattern `find <Directory> ...` とやっても、引数が多すぎる場合にエラーとなってしまう場合は、私はいつも以下のようにやっています。 find <Directory> ... | while read line; do echo "--> $line"; grep pattern $line; done

michiko_
質問者

お礼

回答ありがとうございます。 いろいろなやりかたがあるみたいですね。 勉強してみます。

  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.3

#2の訂正 ・grep の-rオプションは使えないようです。 (さっき試したときはOKそうだったんですが、今確認すると、希望(*.html)以外のも引っかかってました。) 申し訳ない。 ・xarfsじゃなくてxargsです。(ミスタイプを見落としてました。申し訳ない) findで該当ファイルが大量に見つかったときに、適当な数に分割して、次のプログラム(grep) の引数にするプログラムです。 で、grepも xargs grep pattern /dev/null の方がよいかも。 (/dev/nullはおまじない。(findで見つかったファイルがひとつしかなかったときでも、確実にファイル名を表示させるため)。)

michiko_
質問者

お礼

回答ありがとうございます。 いろいろなやりかたがあるみたいですね。 勉強してみます。

  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.2

最近のgrepだと grep pattern -r directory \*.html でできるかも。 #1さんと類似の方法だと find directory -name \*.html -print | xarfs grep pattern 見たいな手もあるかもしれません。

michiko_
質問者

お礼

回答ありがとうございます。 私のlinuxだとダメでした。かなり古いのだと思います。。。 2個目に書いていただいたのは。。。 xarfs というのは何なのでしょうか。。。回答の内容についていけてなくて、すみません。。。

関連するQ&A