Более быстрый способ поиска по файлам, чем grepping?
Есть ли способ индексировать файл или файловое дерево из консоли, чтобы поиск подстрок можно было выполнять быстрее, чем простой поиск?
Мне не обязательно нужна поддержка регулярных выражений, хотя нечувствительность к регистру была бы полезна.
Я ищу простую консольную утилиту, которая будет работать аналогично locate/slocate/mlocate
но вместо имен файлов будет индексировать содержимое файла с определенными типами MIME в настраиваемом месте.
Пока единственное решение, которое я нашел быстрее, это fgrep
ограничен ANSI, а не UTF-8 (с https://stackoverflow.com/a/13913220/191246) - хотя он обеспечивает впечатляющее ускорение, он все еще слишком медленный для больших файлов. Я хотел бы знать, есть ли какой-нибудь "дешевый" способ создания индекса и поиска по нему.
Я рассматриваю свист как вариант, но это потребует дополнительного кодирования.
Меня не интересуют приложения для индексирования на системном уровне, такие как spotlight на mac или их аналоги из linux, поскольку я ищу что-то гранулярное на уровне файлов или подпапок.
2 ответа
Другие альтернативы, которые не требуют индекса, включают:
ripgrep
https://blog.burntsushi.net/ripgrep/
ag
он же серебряный искатель: https://geoff.greer.fm/ag/
Утилиты командной строки для поиска кода 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