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

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

我使用的是 Mac 10.9.5 和 bash shell。我尝试在一组文件中搜索文本实例,但出于某种原因,在某个特定目录中,我收到了这个奇怪的“未终止的引号”错误...

Daves-MacBook-Pro:sbadmin davea$ find src/main/webapp/WEB-INF/ -name "*" | xargs grep 'addresses' > /tmp/addr
xargs: unterminated quote

有什么想法可以解决这个问题吗?

答案1

xargs发生这种情况是因为其中一个文件名包含引号,并按原样传递。这意味着xargs运行方式如下xargs grep 'addresses' > /tmp/addr some file'name— 并且此处未终止'

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

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

  1. 使用和的-print0选项:find-0xargs

    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
    

    但这也不推荐。请参阅第二种选择:

  2. 使用更有效的方法 -grep使用以下-r选项进行递归:

    grep -r 'addresses' src/main/webapp/WEB-INF/ > /tmp/addr
    

相关内容