linux + encontrar palavra / string no arquivo sob o diretório

4

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

    
por yael 03.06.2010 / 12:29

5 respostas

5

Você pode tentar usar o grep diretamente como em

grep -R "param1" /var/*
    
por 03.06.2010 / 12:49
1

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:)

    
por 03.06.2010 / 13:28
1

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.

    
por 03.06.2010 / 16:08
0

encontre ... [blah] ..... -print0 | xargs -0 grep -e "regex"

    
por 03.06.2010 / 15:37
0

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.

    
por 03.06.2010 / 17:36

Tags