我正在尝试递归地 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.0
Linux 5.4.24
ext4
答案1
对于该grep
命令,您缺少 FILE 模式,例如当前目录:
$ grep -r "string to find" .
至少某些 Unices 的默认行为是在缺少标准输入时使用标准输入。来自man grep
:“grep 搜索命名输入文件(如果没有命名文件,或者如果给出单个连字符减号 (-) 作为文件名,则搜索标准输入...”
编辑:抱歉,我现在看到 OP 特别提到了GNU grep 3.4
.这种行为(使用工作目录而不是标准输入)在 v 2.7 之后的某个时候发生了变化,我没有赶上这一点。我将把答案留在这里,作为没有完全阅读问题的教训。