関数名を探していますが、フォルダ構造も深く、見るファイルも多いです。
一般的に私はこのようなものを選択しますが、find * | grep functionname
これが最善のアプローチですか?
答え1
$ find . -type f -print0 | xargs -0 grep foo
$ grep -r foo . # GNU grep only
そしてzsh
、setopt 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
>