Arg lista muito longo erro ao usar encontrar

5

Eu tenho o comando find da seguinte forma:

find /jobs/logs/* -prune -name '*.log' -type f -mtime +1 |
    while read LOGFILE
    do
        echo $LOGFILE
    done

Isso está falhando devido ao seguinte erro:

/usr/bin/find: arg list too long

Alguém pode sugerir uma maneira de corrigir isso?

(Esta é uma continuação de minha pergunta anterior .)

    
por user295338 08.08.2011 / 13:57

2 respostas

4

Deixe find para o diretório transversal, esse é o seu trabalho! Com base na minha resposta anterior :

find /jobs/logs/. -name . -o -type d -prune -o
                  -type f -mtime +1 -exec sh -c 'echo "$0"' {} \;

Incidentalmente, observe que usei -exec para fazer com que find invoque um comando - é para isso.

Além disso, observe que read LOGFILE não lê uma linha de entrada: ele remove os espaços em branco iniciais e interpreta barras invertidas. Uma maneira confiável de ler uma linha é IFS= read -r LOGFILE .

    
por 08.08.2011 / 23:26
4

Tente alterar seu comando find para:

find /jobs/logs/. ! -name . -prune -name '*.log' -type f -mtime +1 

Isso diz ao find para excluir o diretório . e podar todo o resto, para que ele não desça mais.

Dê uma olhada nesta página para obter mais informações: Limite a pesquisa para o diretório atual portably

    
por 08.08.2011 / 14:47