Linux:tools: find| xargs grep局限性

参考http://www.cocoachina.com/articles/50268

有时我们执行find ./ -name "xxx"|xargs grep -rn "xxx"失效,无法显示任何内容;

有可能的原因是:

1.文件权限

2.文件为符号链接

3.文件路径

关于文件路径,包含空格或“-”或反斜杠的目录,是问题所在. xargs按空格分割其输出,并且还解释引号,反斜杠,甚至_字符,因此文件或目录名称中的空格会导致它将不完整的文件名传递给grep

 

要解决此问题,请将find -print0与xargs -0结合使用,如下所示:

find . -name "xxx" -print0 2>/dev/null | xargs -0 grep -rn "xxx" 2>/dev/null

-print0选项告诉find使用二进制0字符分隔文件名,该字符不能出现在有效的文件名中.相应的-0选项告诉part使用相同的字符作为分隔符,也不解释引号和反斜杠.

你可能感兴趣的:(tools)