我使用的是 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
。这是你真的不想做的事情,即使它看起来很诱人。
这个问题有几种解决方案:
使用和的
-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