如何在文件中查找文本并让它搜索多个子文件夹?

如何在文件中查找文本并让它搜索多个子文件夹?

我正在寻找一个函数名称,并且文件夹结构很深,并且有很多文件需要查看。

通常我会选择类似的方法,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
>

相关内容