-bash:/usr/bin/grep:参数列表太长

-bash:/usr/bin/grep:参数列表太长

所以,当我有 500k 个 json 文件时,我不确定如何使用 grep?当我有 200k 个 json 文件时,它还能正常工作,但现在似乎文件太多了。grep 还是其他可以完成这项任务的工具?

[jalal@ivcgpu1 tweets]$ grep -wirnE 'Wed Oct 19 2(1:[0-5][0-9]:[0-5][0-9]|2:([0-2][0-9]:[0-5][0-9]|30:00)) .* 2016' *
-bash: /usr/bin/grep: Argument list too long
[jalal@ivcgpu1 tweets]$ ls -1 | wc -l
554472

答案1

当您在命令行中使用星号时,它们会被 shell 扩展,然后再传递给应用程序。如果星号扩展为 100 多个文件,那么您实际上是在向应用程序传递 100 多个参数。传递大量参数不是问题,但您的 bash 限制为 500,000。

由于您已经在使用-r(递归),是否可以重写对 grep 的调用以仅指定您想要搜索的目录?

# recursive
grep -R <options> <pattern> <directory>

例如,就你的情况而言,你可以这样做:

grep -wirnE \
  'Wed Oct 19 2(1:[0-5][0-9]:[0-5][0-9]|2:([0-2][0-9]:[0-5][0-9]|30:00)) .* 2016' .

*变成.)。

这样,grep 就不必接收包含数十万个文件的列表,而只需接收一个目录,然后使用递归处理来自行查找文件。

相关内容