有没有办法从控制台索引文件或文件树,以便比简单的 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
答案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
并刷新/重新启动您的shell。
用法
索引文件或文件夹:cindex myproject_dir
索引将在 中创建~/.csearchindex
。
现在您可以搜索索引:
csearch sausage-and-spam