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

use*_*388 7 command-line bash grep

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/*.*
Run Code Online (Sandbox Code Playgroud)

结果是一击。

如果我发出

grep -r "washer" /home/den/backup/aaa/*.*
Run Code Online (Sandbox Code Playgroud)

结果是一击。

第一个不应该也找到第二个,如果它的子目录在一个中吗?

ste*_*ver 15

您可以通过使用以下命令将 shell 设置为调试模式来查看此处发生的情况 set -x

$ set -x
$ grep -r "washer" /home/steeldriver/backup/*.*
+ grep --color=auto -r washer /home/steeldriver/backup/great.txt
washer
Run Code Online (Sandbox Code Playgroud)

即外壳正在扩展*.*并匹配单个文件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
Run Code Online (Sandbox Code Playgroud)

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