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