必须有一个更好/更短的方法来做到这一点:
# Find files that contain <string-to-find> in current directory
# (including sub directories)
$ find . | xargs grep <string-to-find>
另外,仅搜索例如HTML文件:
# find . | grep html$ | xargs grep <string-to-find>
预先感谢!
最佳答案
find . -name \*.html
或者,如果您要查找名称与正则表达式匹配的文件:
find . -regex filename-regex.\*\.html
或者,如果您要在名称与正则表达式匹配的文件中搜索正则表达式
find . -regex filename-regex.\*\.html -exec grep -H string-to-find {} \;
grep
参数-H
输出文件名(如果您有兴趣的话)。如果没有,您可以放心地删除它,只需使用grep
即可。这将指示find
对找到的每个文件名执行grep string-to-find filename
,从而避免了参数列表过长的可能性,并且避免了find
在将结果传递给xargs
之前需要完成执行。要解决您的示例:
find . | xargs grep <string-to-find>
可以替换为
find . -exec grep -H string-to-find {} \;
和
find . | grep html$ | xargs grep <string-to-find>
可以替换为
find . -name \*.html -exec grep -H string-to-find {} \;
关于command-line - 搜索字符串: Find and Grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8138635/