Answers:
grep $PATTERN *
就足够了。默认情况下,grep会跳过所有子目录。但是,如果要通过它们进行grep操作,grep -r $PATTERN *
就是这种情况。
grep $PATTERN *.cpp *.h
。如果您需要更详细的规则来确定应删除哪些文件,请使用find
命令(检查Rob的答案)。
grep -r x .
结果来自所有扩展名的所有文件。如果我跑步grep -r x *.scss
,我将没有结果。
*.scss
当前目录中没有文件,但是在子目录的更深处,因此grep不会查找您想要的所有文件。您应该使用--include
option告诉grep递归查找与特定模式匹配的文件:(grep -r x --include '*.scss' .
请注意引号,它们可以防止外壳扩展模式)。或只是使用find
(请参阅Rob的答案)。
使用查找。认真地说,这是最好的方法,因为这样您便可以真正看到它正在运行的文件:
find . -name "*.sql" -exec grep -H "slow" {} \;
注意,-H是mac特定的,它在结果中显示文件名。
xargs
,而不是使用-exec
,这将是多快,因为-exec
产卵每个grep的一个新的进程,以及开销变得显著有大量的文件。有关文件名中空格的标准警告适用于xargs
。
xargs
语法。
find . -iname "*.sql" -print0 | xargs -0 grep "slow"
要搜索所有子目录(但仅搜索特定文件类型),请使用grep和--include
。
例如,在当前目录中递归搜索* .yml和* .yaml中的文本:
grep "text to search" -r . --include=*.{yml,yaml}