Mac OS Xの現在のディレクトリとすべてのサブディレクトリですべての.Javaファイルで単純な文字列(正規表現ではない)を検索するにはどうすればよいですか?一致するファイル名とディレクトリ名のリストを印刷したいだけです。
そして常に人気のある
find . -name '*.Java' | xargs grep -l 'string'
[〜#〜] edit [〜#〜](Frank Szczerbaによる):
スペースを含むファイル名またはディレクトリを処理する場合、これを行う最も安全な方法は次のとおりです。
find . -name '*.Java' -print0 | xargs -0 grep -l 'string'
それを行うには常に複数の方法があります。
従来のUNIXの回答は、この質問で受け入れられたものです。
find . -name '*.Java' | xargs grep -l 'string'
これはおそらくJavaファイルで機能しますが、ファイル名のスペースは従来のUNIXの世界よりもMacではるかに一般的です。スペースのあるファイル名が上記のパイプラインを通過すると、xargsは異なる名前としての個々の単語。
本当に必要なのは、名前をnul-separateして、境界を明確にすることです。
find . -name '*.Java' -print0 | xargs -0 grep -l 'string'
別の方法は、Markが示唆するように、run grepを検索できるようにすることですが、多数のファイルを検索する場合は、そのアプローチは遅くなります(grepは、ファイルのリスト全体で1回ではなく、ファイルごとに1回呼び出されるため)。
Grepよりも優れたgrepを使用してください ack :
ack -l --Java "string"
これは、必要に応じて実際に正規表現を使用し、メタ文字に近づかないようにするか、メタ文字をエスケープして、文字列を検索できます。
find . -iname "*.Java" -exec egrep -il "search string" {} \;
grep -rl --include="*.Java" simplestring *
find
をスキップし、コマンドラインからSpotlight
を使用します。はるかに強力です!
ほとんどの人は、コマンドラインからSpotlight検索を実行できることを知りません。難解なfindとgrepのオプションをすべて覚えているのはなぜですか。また、Spotlightに作業を任せることができるのはなぜですか。 Spotlightへのコマンドラインインターフェイスはmdfindと呼ばれます。コマンドラインでスクリプト化できるため、GUISpotlight検索と同じ機能などを備えています。
TextWrangler のようなGUIプログラムを使用して、オプションがインターフェイスにある場合に、より直感的な検索を実行することもできます。
grep "(your string)" -rl $(find ./ -name "*.Java")
大文字と小文字を区別しない場合は、-rlを-irlに置き換えます。 (文字列)必要性が見られた場合は、正規表現になることもあります。
これを試してみてください:
grep -rl "string" */*Java