我正在使用带有 bash shell 的 Mac 10.9.5。我试图在一组文件中搜索文本实例,但由于某种原因,在一个特定目录中,我收到了这个奇怪的“未终止的引用”错误......
Daves-MacBook-Pro:sbadmin davea$ find src/main/webapp/WEB-INF/ -name "*" | xargs grep 'addresses' > /tmp/addr
xargs: unterminated quote
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决这个问题?
发生这种情况是因为其中一个文件名包含引号并按xargs原样传递给。这意味着xargs就像运行一样xargs grep 'addresses' > /tmp/addr some file'name-'这里有一个未终止的。
实际问题是您正在使用 find | xargs. 这是你真的不想做的事情,即使它看起来很诱人。
这个问题有几个解决方案:
使用-print0选项 forfind和-0for xargs:
find src/main/webapp/WEB-INF/ -name "*" -print0 | xargs -0 grep 'addresses' > /tmp/addr
Run Code Online (Sandbox Code Playgroud)
这是推荐的管道 from findto方式,xargs因为它可以处理任何文件名,甚至包含换行符的文件名。
请注意,使用-name "*"是多余的。您还应该考虑使用-type f仅过滤文件。当然,您也可以从 内部调用程序find:
find … -type f -exec grep 'addresses' {} \; > /tmp/addr
Run Code Online (Sandbox Code Playgroud)
但这也不推荐。查看第二个选项:
完全使用更有效的方法 -grep使用-r选项递归:
grep -r 'addresses' src/main/webapp/WEB-INF/ > /tmp/addr
Run Code Online (Sandbox Code Playgroud)