如何找到具有特定名称且内容包含特定字符串的所有文件的位置?

如何找到具有特定名称且内容包含特定字符串的所有文件的位置?

index.php我想找到所有包含字符串“hello”的文件的位置。

谢谢。

答案1

grep与以下一起使用find

find /top-dir -type f -name index.php -exec grep -l 'hello' {} +

其中/top-dir是您要搜索的最顶层目录的路径。

使用-type f,我们只查看常规文件find,并且-name index.php我们将搜索限制为名为index.php.

-exec grep -l 'hello' {} +将在找到的文件上运行grep,并将输出与模式 ( 'hello') 匹配的所有文件的路径。正是-lwithgrep导致了路径的输出。

最后+find将为每次调用提供尽可能多的文件grep。将其更改为';'\;会导致grep一次调用一个文件,如果有很多文件,这可能会很慢。

答案2

在命令中使用grep如下find

find -type f -name "index.php" -exec grep -q 'hello' '{}' \; -exec echo '{}' \;

答案3

如果您使用的是 bash shell,请启用该globstar选项,以便**在子目录中匹配,然后grep像平常一样使用:

shopt -s globstar
grep -l hello **/index.php

shopt -s globstar(您只需在 shell 中执行一次,除非您使用 禁用该选项shopt -u globstar。)

答案4

另外2种命令方式find

find -type f -name "index.php" -exec grep -l 'hello' {} \;

find -type f -name "index.php" -exec grep -q 'hello' {} \; -print

相关内容