2

Есть ли способ индексировать файл или файловое дерево из консоли, чтобы поиск подстрок можно было выполнять быстрее, чем простой поиск?

Мне не обязательно нужна поддержка регулярных выражений, хотя нечувствительность к регистру была бы полезна.

Я ищу простую консольную утилиту, которая будет работать аналогично locate/slocate/mlocate но вместо имен файлов будет индексировать содержимое файла с определенными типами MIME в настраиваемом месте.

Пока что единственное решение, которое я нашел быстрее, это fgrep ограниченное ANSI, а не UTF-8 (из https://stackoverflow.com/a/13913220/191246) - хотя оно обеспечивает впечатляющее ускорение это все еще слишком медленно для больших файлов. Я хотел бы знать, есть ли какой-нибудь «дешевый» способ создания индекса и поиска по нему.

Я рассматриваю свист как вариант, но это потребует дополнительного кодирования.

Меня не интересуют приложения для индексирования на системном уровне, такие как spotlight на mac или их аналоги из linux, поскольку я ищу что-то гранулярное на уровне файлов или подпапок.

2 ответа2

2

Утилиты командной строки для поиска кода Google (написанные на Go) соответствуют описанному сценарию использования.

На Debian / Ubuntu его можно установить с

sudo apt install codesearch

Чтобы скомпилировать из источника:

Если его еще нет, сначала установите среду golang и определите переменную 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

Далее, cindex и csearch:

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

После установки из исходного кода вы будете иметь cindex и csearch в вашем $GOPATH/bin - либо переместите их куда-нибудь под вашим $PATH , либо добавьте $GOPATH/bin в ваш $PATH и обновите / перезапустите вашу оболочку.

использование

Индексируйте файл или папку:
cindex myproject_dir

Индекс будет создан в ~/.csearchindex .

Теперь вы можете искать по индексу:

csearch sausage-and-spam
1

Другие альтернативы, которые не требуют индекса, включают:

ripgrep https://blog.burntsushi.net/ripgrep/

ag aka серебряный искатель: https://geoff.greer.fm/ag/

ack https://beyondgrep.com/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .