grep -r 和 find 这里有什么区别?

grep -r 和 find 这里有什么区别?

我正在尝试递归地 grep 遍历目录中的文件以查找某个字符串。我选择的解决方案是:

$ find . -type f -exec grep "string to find" {} \+

...而递归地使用 grep (就像其他 UNIX 用户喜欢的那样)似乎会陷入无限循环:

$ grep -r "string to find"

find 和 grep 这里有什么区别?顺便说一句,我正在使用GNU grep 3.4并与文件系统GNU grep 2.7进行比较。GNU find 4.7.0Linux 5.4.24ext4

答案1

对于该grep命令,您缺少 FILE 模式,例如当前目录:

$ grep -r "string to find" .

至少某些 Unices 的默认行为是在缺少标准输入时使用标准输入。来自man grep:“grep 搜索命名输入文件(如果没有命名文件,或者如果给出单个连字符减号 (-) 作为文件名,则搜索标准输入...”

编辑:抱歉,我现在看到 OP 特别提到了GNU grep 3.4.这种行为(使用工作目录而不是标准输入)在 v 2.7 之后的某个时候发生了变化,我没有赶上这一点。我将把答案留在这里,作为没有完全阅读问题的教训。

相关内容