获取xargs:尝试在文件中查找文本时未终止的引用


1

我正在使用带有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

任何想法如何解决这个问题?

Answers:


3

发生这种情况是因为其中一个文件名包含引号并被传递给 xargs 原样。这意味着 xargs 运行就像 xargs grep 'addresses' > /tmp/addr some file'name - 并且有一个未终止的 ' 这里。

实际问题是你正在使用 find | xargs。这是你真正不想做的事情,即使它看起来很诱人。

这个问题有几个解决方案:

  1. 使用 -print0 选项 find-0 对于 xargs

    find src/main/webapp/WEB-INF/ -name "*" -print0 | xargs -0 grep 'addresses' > /tmp/addr
    

    这是推荐的管道方式 findxargs 因为它可以处理任何文件名,甚至是那些包含换行符的文件名。

    注意使用 -name "*" 是多余的。你也应该考虑使用 -type f 仅过滤文件。当然,你可以从内部调用一个程序 find也是:

    find … -type f -exec grep 'addresses' {} \; > /tmp/addr
    

    但这也不推荐。请参阅第二个选项:

  2. 完全使用更有效的方法 - 递归 grep 跟着 -r 选项:

    grep -r 'addresses' src/main/webapp/WEB-INF/ > /tmp/addr
    
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.