Answers:
发生这种情况是因为其中一个文件名包含引号并被传递给 xargs
原样。这意味着 xargs
运行就像 xargs grep 'addresses' > /tmp/addr some file'name
- 并且有一个未终止的 '
这里。
实际问题是你正在使用 find | xargs
。这是你真正不想做的事情,即使它看起来很诱人。
这个问题有几个解决方案:
使用 -print0
选项 find
和 -0
对于 xargs
:
find src/main/webapp/WEB-INF/ -name "*" -print0 | xargs -0 grep 'addresses' > /tmp/addr
这是推荐的管道方式 find
至 xargs
因为它可以处理任何文件名,甚至是那些包含换行符的文件名。
注意使用 -name "*"
是多余的。你也应该考虑使用 -type f
仅过滤文件。当然,你可以从内部调用一个程序 find
也是:
find … -type f -exec grep 'addresses' {} \; > /tmp/addr
但这也不推荐。请参阅第二个选项:
完全使用更有效的方法 - 递归 grep
跟着 -r
选项:
grep -r 'addresses' src/main/webapp/WEB-INF/ > /tmp/addr