ファイル内のテキストを検索し、複数のサブフォルダを検索する方法は?

ファイル内のテキストを検索し、複数のサブフォルダを検索する方法は?

関数名を探していますが、フォルダ構造も深く、見るファイルも多いです。

一般的に私はこのようなものを選択しますが、find * | grep functionnameこれが最善のアプローチですか?

答え1

$ find . -type f -print0 | xargs -0 grep foo
$ grep -r foo . # GNU grep only

そしてzshsetopt extendedglob

$ grep foo **/*(.)

答え2

しかもackは、これらのタスク用に特別に設計されており、サブフォルダの検索を自動的に実行します。

答え3

応答の代わりに、次のようにfind | xargs使用することを検討できます。商標テキストを検索するのではなく、特に関数名を検索すると言われたからです。

これを行うには、ctagsソースコードに対してファイルを実行してファイルを作成し、TAGSそのgrepファイルに対して実行するとTAGS次の形式で行が出力されます。

{tagname}<Tab>{tagfile}<Tab>{tagaddress}

これにはtagname関数名が含まれており、tagfileその関数を含むファイルであり、tagaddressその行に到達したviコマンドがあります。 (おそらく行番号しかありません。)

(Eclipseで構築されたさまざまなインデックスに対して同様の操作を実行したり、Eclipseデータベースをクエリしたりする簡単な方法はありますか?)

答え4

find . | xargs grepスペースを含むファイル名は失敗します。

> echo test > "a b c"
> find . | xargs grep test
grep: ./a: No such file or directory
grep: b: No such file or directory
grep: c: No such file or directory

-print0にもこの問題があることに注意してください。

-exec grepすべてのファイル名を内部的に処理し、この問題を防ぐfindで使用する方が良いと思います。

> find . -exec grep test {} \;
test
>

関連情報