Linux 下使用Recoll实现文件名快速搜索(像windows下的everything)

来源:互联网 发布:人皇sky有多厉害 知乎 编辑:程序博客网 时间:2024/04/29 11:31
everything是windows下的最快速文件名搜索工具.从windows平台转到ubuntu下,很不惯的一点就是没有了everything.

上网搜索了一下,基本的说法是Linux下可以使用find命令搜索文件,但find命令搜索的速度很不快.
搜索速度快的,有mlocate或locate这些等,因为对文件信息建立了数据库,从数据库中搜索,所以速度快,不过是命令行.
everything的搜索方法就像搜索引擎,用空格分隔多个关键词,并且搜索结果是实时显示的(输入马上搜索,不需要按回车),用惯了everything,是不会使用命令行文件搜索工具的.

于是开始找有Gui的搜索工具,找到catfish这个find和locate命令的Gui前端.但是,想好像使用everything那样简单地用空格分隔关键词是不被支持的,输入如"web*"也是不被支持的,"web*pdf"也是不被支持,需要输入"*web*pdf"才行.
不想去了解为什么"web*pdf"不被支持,小结就是勉强能用但绝不好用.

然后找到recoll,一个全文搜索工具.可以使用空格分隔关键词,可以配置为按下空格时进行搜索(半吊子的实时搜索),搜索速度足够快(感觉就像即时显示结果),在搜索栏左边有一个下拉框,可以选择搜索的类型,里面有一个"file name"选项,选中后,可只搜索文件名(因为全文搜索出现的结果十分之多,很难找到自己想找的文件).
基本上达到了everything的使用体验,但有一个问题,recoll默认进行的是全文索引,索引数据库非常大,最坏的情况索引跟原文件的大小相同甚至比原文件还大.我索引了两个自己的资料目录,recoll的数据库就达到了600M.非常不好,我需要的只是搜索文件名.

写到这里开始写本文的正题:在网上找到一篇recoll用户手册的翻译:
[Recoll用戶手冊翻譯,Recoll user manual](http://stupidbeauty.com/Blog/2012/03/recoll%E7%94%A8%E6%88%B6%E6%89%8B%E5%86%8A%E7%BF%BB%E8%AD%AF%EF%BC%8Crecoll-user-manual-2/)
注:访问需代理.

看到recoll有一个配置参数 indexedmimetypes 用于控制对哪些文件建立全文索引,默认此配置值为空,表示对所有能识别的文件建立全文索引.
另外还有一个配置项 indexallfilenames 控制是否总是对文件名建立索引,默认为1,表示总是对文件名建立索引.
所以,只要把 indexedmimetypes 设为一个不存在的文件类型,再让 indexallfilenames 的值为1(默认就是),那么便只会建立文件名索引,不会建立全文索引了.
配置项如下:
indexallfilenames = 1
indexedmimetypes = text/abc
保存到 ~/.recoll/recoll.conf 中,然后删掉recoll已建立的索引数据库(位于 ~/.recoll/xapiandb),并重新建立索引便可.
重新建立索引后,索引数据库大小从之前的600M减少为27M.

实际上,我只使用recoll索引我自己的资料文件夹,而不是索引整个硬盘,因为我最常用的就是搜索自己的资料文件.
如果要在整个硬盘中查找一个文件(比如某个软件的配置文件),还是会使用catfish调用locate进行搜索.
原创粉丝点击