我正在输入一个我经常使用 Linux 和 Unix 完成的命令,但使用 Apple Mac OS X 10.8(可能更早)grep: unknown --devices option时,当我尝试运行以下命令时,我得到了一个命令:
find . -type f -name '*.sql' 2>/dev/null | xargs grep -i 'texttolookfor'
Run Code Online (Sandbox Code Playgroud)
我检查了find命令的结果,它们似乎都只是标准.sql文件。我应该补充一点,问题出现在其他文件搜索中,而不仅仅是.sql文件。在搜索苹果网站和谷歌时,我似乎找不到任何关于这里发生了什么的迹象。
有人有建议吗?
听起来您遇到了一个名称很有趣的文件,而 xargs 将其视为两个文件。最好的方法是重新处理您的 find 以安全地处理所有名称:
find . -type f -name '*.sql' -exec grep -i 'texttolookfor' '{}' +
Run Code Online (Sandbox Code Playgroud)
这使用 find--exec COMMAND +语法而不是xargs. 您也可以使用-print0/ xargs -0(如果它适用于 OS X,不确定),但没有真正的理由,除非您需要其他 xargs 功能。
最后,如果 OS X grep 支持它,您可以使用--来指示选项结束——它会在'{}',之前——尽管这真的不应该在 find 中需要(因为找到的文件总是以 开头./)