递归grep包括为当前文件夹提供不正确的结果

时间:2014-11-20 15:15:04

标签: linux grep

我创建了一个测试目录结构: t1.html t2.php A / t1.html A / t2.php B / t1.html B / t2.php

所有文件都包含字符串" HELLO"。

以上命令从上面的根文件夹运行:

> grep -r "HELLO" *
b/t1.html:HELLO
b/t2.php:HELLO
c/t1.html:HELLO
c/t2.php:HELLO
t1.html:HELLO
t2.php:HELLO

> grep -r --include=*.html "HELLO" *
b/t1.html:HELLO
c/t1.html:HELLO
t2.php:HELLO

为什么它包含来自子目录的正确.html文件,但是来自当前目录的.php文件?

如果我弹出一个级别到我整个结构上方的目录,那么它会给出以下结果:

grep -r --include=*.html "HELLO" *
a/t1.html:HELLO
a/c/t1.html:HELLO
a/b/t1.html:HELLO

这是我从结构中跑出来的预期。

我假设我可以一起使用find + grep实现目标,但我认为这是grep的有效用法。

感谢您的帮助。

安迪

1 个答案:

答案 0 :(得分:1)

使用点而不是星号:

grep -r HELLO .

由shell评估星号,并替换为当前目录中所有文件的列表(其名称不以点开头)。然后所有这些都是递归地插入。