Você pode tentar usar o grep diretamente como em
grep -R "param1" /var/*
Eu tenho o seguinte comando
find /var -type f -exec grep "param1" {} \; -print
Com este comando, eu posso encontrar a string param1 em qualquer arquivo em / var, mas o tempo que leva para isso é muito longo.
Eu preciso de outra possibilidade para encontrar uma string no arquivo, mas muito mais rápido do que o meu exemplo
Você pode tentar usar o grep diretamente como em
grep -R "param1" /var/*
A pesquisa rápida é obtida principalmente por meio de um "índice" do conteúdo, um tipo de "tabela de consulta". existem alguns mecanismos de pesquisa gratuitos que criam um índice de arquivos de entrada e fornecem resultados muito rápidos:
eu duvido que você queira ir desse jeito, mas apenas para lhe dar outra opção:)
Existem alguns fatores em ação aqui:
Primeiro , usando -exec
, find está gerando um novo processo para grep
para cada arquivo encontrado.
Isso pode ser gerenciado usando xargs como na resposta de Felipe Alvarez (eu escrevi um postagem no blog sobre isso há 5 ou mais anos) ou usando -exec grep param1 {} +
(observe o +
em vez de \;
). Ao usar +
, "a linha de comando é criada anexando cada nome de arquivo selecionado no final; o número total de invocações do comando será muito menor que o número de arquivos correspondentes" (de pre página man )
Segundo , o número e o tamanho dos arquivos em /var
são potencialmente muito grandes.
Você pode adicionar parâmetros além de -type f
para limitar os arquivos que está pesquisando. find
tem opções para limitar por tempo, proprietário, padrão de nome, etc. Por exemplo, você poderia fazer:
find /var -type f -name "access*log" -mtime -7 -exec grep param1 {} +
Isso irá encontrar arquivos modificados nos últimos sete dias com nomes começando com "access" e terminando com "log". Apenas esses arquivos correspondentes farão parte do exec / grep.
encontre ... [blah] ..... -print0 | xargs -0 grep -e "regex"
Eu aconselho usar:
grep -RInis "param1" /var
Para mais detalhes, consulte
man grep
Se a velocidade é tão importante, você pode considerar o fgrep, que pode não ser mais rápido, dependendo da implementação.