-bash: / usr / bin / grep: список аргументов слишком длинный

Итак, я не уверен, как сделать 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
1
задан 16 January 2018 в 02:08

1 ответ

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

5
ответ дан 16 January 2018 в 02:08

Другие вопросы по тегам:

Похожие вопросы: