答案1
根据Grep 手册:
-r
grep 是递归目录搜索,因此要使用它,您需要指定起始目录,而不是文件掩码。
例如:
grep -r INSERT .
将查找所有文件的 INSERT,从当前目录 ( .
) 开始并递归地遍历子文件夹。
指定递归文件夹检查和指定文件通配符来限制搜索,可以使用该--include
选项:
grep -r --include "*.sql" INSERT .
StackOverflow 上类似的问题/信息:我如何以递归方式进行 grep?
答案2
因为没有*.sql文件。
答案3
grep
是一款很棒的工具,具有一些有趣的参数。然而,正如其名称所示(G全局搜索r常规埃xpression 和页rint)用于匹配事物。如果您想要查找文件,请使用find
。
在这种情况下,您似乎想要INSERT
在该树中的文件中查找文本。
为此,您需要执行以下操作:
find -name "*.sql" grep -h INSERT {} \;
find -name "*.sql"
将找到所有这些文件,然后grep -h
打印其中包含文本的文件INSERT
。
为什么你的方法不起作用?
因为通过输入,bash 会在执行命令之前grep -r ... *.sql
尝试扩展它。但是目录中没有任何匹配项,因此它无法工作。*.sql
*.sql
您可以将--include
参数与正则表达式一起使用,但根据我的经验,它非常脆弱。