当我使用 glob 搜索时,为什么 grep -r 也不在子目录中查找?

当我使用 glob 搜索时,为什么 grep -r 也不在子目录中查找?

Grep with-r对我来说不起作用。

然后我做了一个测试情况。目录/home/den/backup现在包含一个包含单词的文件washer。我还在 内创建了一个子目录/home/den/backup。在该目录中,一个文件包含单词washer。以下内容应返回 /home/den/backup/great.txt和处的两个匹配项/home/den/backup/aaa/info.txt

如果我发出

grep -r "washer" /home/den/backup/*.*

结果是一击命中。

如果我发出

grep -r "washer" /home/den/backup/aaa/*.*

结果是一击命中。

第一个难道不应该找到第二个吗?第二个位于它的子目录中。

答案1

你可以通过将 shell 设置为调试模式来查看这里发生的情况set -x

$ set -x
$ grep -r "washer" /home/steeldriver/backup/*.*
+ grep --color=auto -r washer /home/steeldriver/backup/great.txt
washer

即,shell 正在扩展*.*并匹配单个文件great.txt- 因此grep搜索该单个文件。

如果你想递归搜索整个目录,只需将目录作为参数:

$ grep -r "washer" /home/steeldriver/backup/
+ grep --color=auto -r washer /home/steeldriver/backup/
/home/steeldriver/backup/aaa/info.txt:washer
/home/steeldriver/backup/great.txt:washer

(您可以使用再次关闭调试模式set +x

相关内容