如何避免“grep:参数列表太长”错误?

Dav*_*ave 7 script bash grep xargs

我正在使用 Mac 10.7.5 和 bash shell。我正在尝试在一组文件中查找字符串的实例,但不断收到此错误

Daves-MacBook-Pro:folder davea$ find . -name "*" | xargs grep 'state-icons'
xargs: grep: Argument list too long
Run Code Online (Sandbox Code Playgroud)

如何运行命令(或类似命令)以避免此错误?

cho*_*oba 8

您可以使用-n选项xargs来限制参数的数量。

find . -name "*" | xargs -n 20 grep 'state-icons'
Run Code Online (Sandbox Code Playgroud)

但是更好的解决方案是使用-type f而不是-name "*"为了将列表限制为普通文件,避免每个文件夹的错误消息。

请注意,它不适用于名称中包含空格的文件。

  • 如果`find` 报告例如61 个文件,那么`xargs` 将运行`grep` 4 次——3 次20 个文件和1 个文件一次。当 grep 运行多个文件时,它会报告找到匹配的文件的名称;只有一个文件名参数并非如此。通常用来解决这个问题的一个技巧是说 `xargs -n 20 grep 'state-icons' /dev/null`,所以 `xargs` 会用 21 个文件运行 `grep` 三次,用 2 个文件运行一次 ––当然,附加文件是`/dev/null`,否则对运行没有影响。 (3认同)
  • @Scott:您还可以使用 `grep` 的 `-H` 选项(如果支持)。 (2认同)