如何在 Linux 的文件树中递归地查找短语/单词?

如何在 Linux 的文件树中递归地查找短语/单词?

如何在 Linux 的文件树中递归查找短语/单词?
我试了find . -name ./* | grep my_phrase 又试grep -r "register_long_arrays" *

答案1

grep -r "register_long_arrays" *

将以递归方式查找register_long_arrays当前目录中的所有出现的位置。

如果您想结合findgrep限制搜索的文件类型,您应该像这样使用它(此示例将搜索限制为以 结尾的文件.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如果您不仅想知道它是否被找到,还想知道它在哪里被找到。

相关内容