現在のディレクトリとMac OS Xのすべてのサブディレクトリで、すべての.javaファイルで単純な文字列(正規表現ではない)を検索するにはどうすればよいですか?一致するファイル名とディレクトリ名のリストを印刷したいだけです。
現在のディレクトリとMac OS Xのすべてのサブディレクトリで、すべての.javaファイルで単純な文字列(正規表現ではない)を検索するにはどうすればよいですか?一致するファイル名とディレクトリ名のリストを印刷したいだけです。
回答:
そして、常に人気の
find . -name '*.java' | xargs grep -l 'string'
編集(フランク・シュツェルバによる):
スペースを含むファイル名またはディレクトリを扱う場合、これを行う最も安全な方法は次のとおりです。
find . -name '*.java' -print0 | xargs -0 grep -l 'string'
常に複数の方法があります。
mdfind
これを行うよりOSXyの方法です!
従来のUNIXの答えは、この質問に対して受け入れられたものです。
find . -name '*.java' | xargs grep -l 'string'
これはおそらくJavaファイルで機能しますが、ファイル名のスペースは、従来のUNIXの世界よりもMacの方が一般的です。スペースを含むファイル名が上記のパイプラインを通過すると、xargsは個々の単語を異なる名前として解釈します。
本当に欲しいのは、名前をヌルで区切って境界を明確にすることです:
find . -name '*.java' -print0 | xargs -0 grep -l 'string'
別の方法は、Markが示唆するように、grepを実行することです。ただし、多数のファイルを検索する場合は、このアプローチは遅くなります(grepはファイルのリスト全体ではなく、ファイルごとに1回呼び出されるため)。
grep、ackよりも優れたgrepを使用します。
ack -l --java "string"
grep -rl --include="*.java" simplestring *
コマンドラインからスキップfind
して使用Spotlight
します。はるかに強力です!
ほとんどの人は、コマンドラインからSpotlight検索を実行できることを知りません。すべての不可解なfindおよびgrepオプションを覚えているのはなぜですか。Spotlightに作業を任せることができるのはいつですか。Spotlightのコマンドラインインターフェイスはmdfindと呼ばれます。コマンドラインでスクリプト可能なため、GUI Spotlight検索などと同じパワーを持っています!
これを試してください:
grep -rl "string" */*java
また、TextWranglerのようなGUIプログラムを使用して、オプションがインターフェースにあるより直感的な検索を行うこともできます。