A combinação find, xargs e grep lança um erro

0

O comando que gera o erro:

$ find /mydir/tmp/*20151014* -print | xargs grep -l 'filesTransmitted=1'
bash: /usr/bin/find: The parameter or environment lists are too long.

Existe algum comando ideal para fazer o mesmo?

    
por kumar2008 15.10.2015 / 07:28

2 respostas

4

É a expansão dos nomes dos arquivos (diretório?) em /mydir/tmp/*20151014* que é o problema aqui.

Tente isso, o que evita a necessidade de seu shell expandir o nome com curinga para uma lista:

find /mydir/tmp -name '*20151014*' -exec grep -l 'filesTransmitted=1' {} \;

É um pouco diferente do seu, em que o seu pesquisa arquivos ou todos os arquivos em diretórios, começando de correspondências para /mydir/tmp/*20151014* , enquanto o meu pesquisa todos os arquivos cujo nome corresponde a *20151014* em qualquer lugar abaixo de /mydir/tmp . Se isso não atender aos seus requisitos, forneça um conjunto exemplo dos arquivos e seus caminhos de diretório.

    
por 15.10.2015 / 09:21
0

Talvez sua lista de argumentos seja longa demais. Verifique esta página:
link

getconf ARG_MAX fornecerá o tamanho máximo permitido para argumentos.

Tente alterar o valor máximo da pilha, com ulimit -s exibindo o valor atual e, com ulimit -s (value) , alterá-lo. Você também pode usar ulimit -s unlimited .

Lendo todos esses artigos, parece que após o kernel linux 2.6.32 o valor de ARG_MAX é alocado dinamicamente e é baseado no valor ulimit -s.

    
por 15.10.2015 / 08:57

Tags