如何使用find递归查找含指定字符串的文件仅返回文件名?
解决只返回匹配文件名的问题
我来帮你搞定这个需求!你当前的命令会输出每个匹配到的字符串内容,再跟着文件名,确实会让输出变得很冗长。只需要调整一下参数或者命令结构,就能只返回包含指定字符串的PHP文件名,给你几个实用的方案:
方案1:给grep加上-l参数(最直接的修改)
把原命令里的grep加上-l(小写字母L)参数,这个参数的作用就是只输出包含匹配内容的文件名,不会打印具体的匹配行:
find . -name '*.php' -exec grep -il 'MATCH' {} \;
-i:忽略大小写匹配(保留你原来的需求)-l:仅输出匹配到的文件名,每个文件只输出一次
方案2:用xargs配合grep(更高效)
如果你的文件数量比较多,用xargs可以减少进程创建的开销,效率更高:
find . -name '*.php' | xargs grep -il 'MATCH'
xargs会把find输出的所有文件名一次性传给grep,而不是像-exec那样每个文件启动一次grep进程。
方案3:直接用grep的递归搜索(简化命令)
如果你的grep是GNU版本(大部分Linux系统默认都是),可以直接用grep的递归参数-r,省去find命令,更简洁:
grep -ril 'MATCH' --include='*.php' .
-r:递归搜索当前目录下的所有文件--include='*.php':只搜索后缀为php的文件,和find的-name作用一致
这样不管用哪个方案,输出都会只包含那些包含MATCH字符串的PHP文件名,不会有多余的匹配内容啦!
内容的提问来源于stack exchange,提问作者bhttoan
相关产品推荐
相关产品推荐

