TL; DR
Adicione -iname "*.log" após / ao seu comando find . Consulte a man page para mais informações
Uma resposta mais detalhada
A tarefa em mãos é a seguinte:
- Listar arquivos que correspondem ao padrão
*.log - Execute
greppor cada arquivo para descobrir se ele contém ou não uma string específica. - Listar o nome do arquivo que tem uma correspondência no
stdout
O exemplo de como isso pode ser feito pode ser visto abaixo:
$ find /var/log -iname "*.log" -exec grep -l 'wlan' {} \+
Essencialmente, há 3 coisas em jogo:
-
findfaz o trabalho de localizar arquivos E chamandogreppor lista de nomes de arquivos na estrutura-exec ...{} \+, onde{}será substituído por todos os nomes de arquivos encontrados. -
-iname "*.log"pode fornecer correspondência insensível a maiúsculas e minúsculas dos nomes de arquivos -
-exec . . .{} \+chama a funçãoexecvede baixo nível que gerarágrep -lcom a lista de todos os arquivos encontrados na frente dela (no lugar de{}). - O
\+é a opção que especifica paraexecvepara empacotar como qualquer arquivo possível na frente degrep(o limite é definido pela variávelARG_MAX, é específico paraexece para o Ubuntu está em2097152, como pode ser mostrado pelo comandogetconf ARG_MAX). Quando o limite for atingido,execrepetirá a chamada paragrepcom mais arquivos compactados como argumentos. O\é necessário para garantir que+seja interpretado como argumento parafinde não como outro comando da shell. - a opção
-lou grep mostra arquivos com string correspondente.-Lcorresponderia aos arquivos sem a string.