Итак, я не уверен, как сделать grep, когда у меня есть 500k файлов json? Это работало, когда у меня было 200 Кб, но теперь у меня слишком много файлов. Или 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
Когда вы используете звездочки в командной строке, они раскрываются вашей оболочкой перед передачей в приложение. Если эта звездочка расширяется до 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 передавался список из сотен тысяч файлов, ему просто назначается один каталог, и он использует свою рекурсивную обработку для поиска самих файлов.