所以,当我有 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)
当您在命令行上使用星号时,它们会在传递给应用程序之前由您的 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 不会收到包含数十万个文件的列表,而是只提供一个目录,并使用其递归处理来查找文件本身。