Como produzir as linhas de um arquivo depois de encontrar e um grep?

0

Olá, desejo emitir mensagens de ERRO de arquivos de registro da data atual.

Primeiro pesquiso os registros de hoje com prefixo específico:

find /home/USER/logfilesError/ -maxdepth 1 -type f -name "xy_*" -daystart -mtime -1

Isso me dá essa saída:

/home/USER/logfilesError/xy_2071.log
/home/USER/logfilesError/xy_2072.log
/home/USER/logfilesError/xy_2073.log

Nesses arquivos, quero pesquisar a string "ERROR":

grep -rl "ERROR" /home/USER/logfilesError/

Isso me fornece todos os arquivos de log contendo "ERROR" não apenas a partir de hoje.

Saída (apenas parte da saída):

/home/USER/logfilesError/xy_55.log
/home/USER/logfilesError/xy_1015.log

Pergunta:

Como posso combinar isso em um script?

A sintaxe de uma linha nos arquivos de log é:

2013-11-24 06:30:30,549 [main] ERROR *(+Errormessage)*
    
por BlueFox 06.06.2014 / 09:41

1 resposta

3

Tente isto:

find /home/USER/logfilesError/ -maxdepth 1 -type f -name "xy_*" \
    -daystart -mtime -1 -exec grep -Hl "ERROR" "{}" +

De man find :

-exec command {} +
              This  variant  of the -exec action runs the specified command on
              the selected files, but the command line is built  by  appending
              each  selected file name at the end; the total number of invoca‐
              tions of the command will  be  much  less  than  the  number  of
              matched  files.   The command line is built in much the same way
              that xargs builds its command lines.  Only one instance of  '{}'
              is  allowed  within the command.  The command is executed in the
              starting directory.
    
por 06.06.2014 / 09:55