有没有比 grepping 更快的搜索文件的方法?

有没有比 grepping 更快的搜索文件的方法?

有没有办法从控制台索引文件或文件树,以便比简单的 grepping 更快地搜索子字符串?

我并不一定需要对正则表达式的支持,尽管不区分大小写会很好。

我正在寻找一个简单的控制台实用程序,其工作方式类似,locate/slocate/mlocate但不是用文件名,而是在可配置位置使用特定的 mime 类型索引文件内容。

到目前为止,我发现的唯一“比 grep 更快”的解决方案仅限fgrep于 ANSI 而不是 UTF-8(来自https://stackoverflow.com/a/13913220/191246) — 虽然它提供了令人印象深刻的加速,但对于大文件来说仍然太慢了。我想知道是否有一些“便宜”的方法来创建索引并对其进行搜索。

我正在考虑呼呼作为一种选择,但这需要额外的编码。

我对系统级索引应用程序(例如 Mac 上的 Spotlight 或 Linux 上的同类应用程序)不感兴趣,因为我正在寻找文件或子文件夹级别的细粒度内容。

跟进

接受的答案非常符合最初的核心要求。在下一个层面上,经过广泛搜索,找到了一个具有友好 Web UI 的精细桌面搜索解决方案,专门用于搜索数万个 HTML 文件,最终选择了omega-xapian— 一个快速且极简的索引搜索引擎,带有可在 Web 服务器上运行的 CGI 脚本(通过 caddy 和 CGI​​ 插件使用)。Omega 最初用于网站搜索,但可以重新用于“桌面搜索”。列出了为 MacOS 配置 Xapian 搜索的步骤这里(应该很容易适应其他操作系统)。通过运行的 crontab 条目定期更新数据库omindex。如果您提供支持的命令行转换器,它还可以配置为索引二进制格式(PDF、DOC、DOCX 等)。

答案1

其他不需要索引的替代方案包括:

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

ag又名银色搜索者:https://geoff.greer.fm/ag/

ack https://beyondgrep.com/

答案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

接下来,构建cindexcsearch

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

一旦从源代码安装,您将拥有cindexcsearch在您的下$GOPATH/bin- 要么将它们移动到您的下的某个地方$PATH,要么添加$GOPATH/bin到您的$PATH并刷新/重新启动您的shell。

用法

索引文件或文件夹:
cindex myproject_dir

索引将在 中创建~/.csearchindex

现在您可以搜索索引:

csearch sausage-and-spam

相关内容