Uma maneira mais rápida de pesquisar arquivos do que de grepping?

2

Existe uma maneira de indexar um arquivo ou uma árvore de arquivos do console para que a pesquisa de substrings possa ser feita mais rapidamente do que o grepping simples?

Eu não preciso necessariamente de suporte para expressões regulares, embora seja bom ter insensibilidade a maiúsculas e minúsculas.

Estou procurando um utilitário de console simples que funcione de maneira semelhante a locate/slocate/mlocate , mas, em vez de nomes de arquivos, indexe o conteúdo de arquivos com tipos mime específicos em um local configurável.

Até agora, a única solução "mais rápida que a grep" que encontrei é fgrep restrita a ANSI em vez de UTF-8 (de link ) - enquanto fornece uma aceleração impressionante, ainda é muito lento para arquivos grandes. Gostaria de saber se existe alguma maneira "barata" de criar um índice e pesquisar contra ele.

Estou considerando whoosh como uma opção, mas isso exigiria codificação extra.

Não estou interessado em aplicativos de indexação no nível do sistema, como o Spotlight on Mac ou seus correspondentes Linux, já que estou procurando algo granular no nível de arquivo ou de subpasta.

    
por ccpizza 28.10.2017 / 03:36

2 respostas

1

Outras alternativas que não exigem um índice incluem:

ripgrep link

ag também conhecido como pesquisador de prata: link

ack link

    
por 05.02.2018 / 06:36
2

Os utilitários de linha de comando de pesquisa de código do Google (escritos em Go) se encaixam no caso de uso descrito.

No debian / ubuntu, ele pode ser instalado com

sudo apt install codesearch

Para compilar a partir da fonte:

Se ainda não estiver presente, instale primeiro o ambiente golang e defina a variável GOPATH :

sudo mkdir -p /usr/local/go
sudo chown myusername /usr/local/go

## normally you'd put this in your ~/.bashrc
export GOPATH=/usr/local/go

## on ubuntu/debian:
sudo apt install golang

## on osx
brew install golang

Em seguida, crie cindex e csearch :

go get github.com/google/codesearch/cmd/...

Depois de instalar a partir da origem, você terá cindex e csearch sob seu $GOPATH/bin - mova-os para algum lugar abaixo de $PATH ou adicione $GOPATH/bin ao seu $PATH e atualize / reinicie seu shell .

Uso

Indexar um arquivo ou pasta:
cindex myproject_dir

O índice será criado em ~/.csearchindex .

Agora você pode pesquisar o índice:

csearch sausage-and-spam
    
por 28.10.2017 / 20:42