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

Mon*_*lal 1 grep

所以,当我有 500k json 文件时,我不确定如何做 grep?当我有 200k 时它正在工作,但现在似乎我有太多文件。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
Run Code Online (Sandbox Code Playgroud)

tho*_*ter 5

当您在命令行上使用星号时,它们会在传递给应用程序之前由您的 shell 展开。如果该星号扩展为 100 多个文件,那么您实际上是向应用程序传递了 100 多个参数。传递相当多的参数不是问题,但是您的 bash 有 500,000 的限制。

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

# recursive
grep -R <options> <pattern> <directory>
Run Code Online (Sandbox Code Playgroud)

例如在你的情况下,你可以去:

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' .
Run Code Online (Sandbox Code Playgroud)

*改为.)。

这样,grep 不会收到包含数十万个文件的列表,而是只提供一个目录,并使用其递归处理来查找文件本身。