如何在 Linux 的文件树中递归查找短语/单词?
我试了find . -name ./* | grep my_phrase
又试grep -r "register_long_arrays" *
答案1
grep -r "register_long_arrays" *
将以递归方式查找register_long_arrays
当前目录中的所有出现的位置。
如果您想结合find
来grep
限制搜索的文件类型,您应该像这样使用它(此示例将搜索限制为以 结尾的文件.txt
):
find . -name '*.txt' -exec grep "register_long_arrays" {} \;
会{}
替换为find
找到的每个文件,而您无需担心转义空格等问题字符。请注意分号前的反斜杠。这可确保分号被转义并传递给 exec 子句 (grep),而不是终止 find 命令。
如果您仍然找不到您想要的内容,则可能是大小写问题(-i
向 grep 提供标志以忽略大小写)或您想要的内容位于隐藏文件中(以 开头.
),这将不匹配,在这种情况下,请将和 都作为参数*
提供给 grep。*
.*
答案2
find . -type f -exec grep my_phrase {} \;
可以搜索所有常规文件,但grep
每个文件都会调用一次。这效率低下,在较慢的计算机和/或较大的目录层次结构上,搜索时间会明显变长。因此,最好使用xargs
:
find . -type f | xargs grep my_phrase
或者,如果你的文件名称中包含空格,
find . -type f -print0 | xargs -0 grep my_phrase
更简单的是只需使用选项-r
即可grep
:
grep -r my_phrase .
请注意使用 . 而不是 * 作为文件名参数。这避免了 * 扩展不包括隐藏文件的问题。
答案3
尝试:
find . -name ./\* | xargs grep my_phrase
xargs
将对find
找到的每个文件调用 grep。
答案4
find . -exec grep my_phrase {} \;
find
生成当前目录或以下所有文件的列表。将对找到的每个文件exec
执行命令。只是让它工作的魔法。通常可以使用 来查看其工作原理的详细信息。grep my_phrase
\;
man find
您可能还想考虑这个-H
选项,grep
如果您不仅想知道它是否被找到,还想知道它在哪里被找到。