-bash: / usr / bin / grep: lista de argumentos muito longa

1

Então, eu não sei como fazer o grep quando eu tenho 500k arquivos json? Estava funcionando quando eu tinha 200k, mas parece que agora eu tenho muitos arquivos. Ou grep ou qualquer coisa que possa fazer a tarefa?

[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
    
por Mona Jalal 16.01.2018 / 00:08

1 resposta

5

Quando você usa asteriscos na linha de comando, eles são expandidos pelo seu shell antes de serem passados para o aplicativo. Se esse asterisco se expandir para mais de 100 arquivos, você estará passando mais de 100 argumentos para o aplicativo. Não é um problema passar muitos argumentos, mas o seu bash tem um limite de 500.000.

Como você já está usando -r (recursiva) é possível reescrever a chamada para o grep para especificar apenas o diretório em que você deseja procurar?

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

Por exemplo, no seu caso, você poderia:

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' .

( * foi alterado para . ).

Dessa forma, em vez de o grep receber uma lista de centenas de milhares de arquivos, ele recebe apenas um diretório e usa seu processamento recursivo para localizar os arquivos em si.

    
por thomasrutter 16.01.2018 / 00:19