使用 Glimpse 进行索引

作者:Michael K. Johnson

由于我几乎全部的生计都依靠电子邮箱交流来维持,我的电子邮件存档(不包括许多一年多以前的消息)目前占用了我宝贵的硬盘空间近 100MB —— 这已经足够让我开始考虑购买一个单独的硬盘专门用于存放我的个人文件了。为了更好地跟踪我的电子邮件存档,我最近安装了 exmh,这是一个基于 MH(一个强大但复杂的邮件阅读器)和 Tcl/Tk 的图形化邮件程序,这是一种有点孤注一掷但略有成功的尝试。

exmh 可以使用一个名为 glimpse 的可选程序来帮助管理电子邮件。这个程序会从您的部分或全部邮件文件中构建索引,exmh 使用这个索引来快速搜索您想要查找的任何单词。现在,我可以在不到一分钟的时间内搜索我所有的电子邮件存档,找到一封很久以前丢失的信件。

但是这篇文章不是关于 exmh 的,尽管它对像我这样的 MH 用户非常有用。这篇文章是关于 glimpse 的,它本身就是一个出色的程序。

准备 Glimpse

与著名的 grep 程序不同,glimpse 通常不接受指定要搜索文件的参数。相反,默认情况下,glimpse 会在它索引的每个文件中查找。这意味着 glimpse 需要索引才能工作。

使用 glimpse 最简单的方法可能是索引所有文件,并在查找内容时搜索所有文件。为此,您需要使用以下命令创建索引:

glimpseindex $HOME

glimpseindex ~

这将索引您的所有文件,并将索引保存在您主目录中,文件名称以 .glimpse_ 开头。这些文件通常会占用您目录中文件总空间的 2% 到 3% 左右。

如果您想从索引中排除某些文件名,可以将它们的完整路径名或使用 *? 字符的“通配符”表达式添加到 .glimpse_exclude 文件中。所有 .glimpse_* 文件都在 glimpseindex 的 man 手册页中进行了说明。

由于您的文件可能会不时更改,因此您需要偶尔更新索引。您可以手动执行此操作,使用与创建索引时相同的命令,或者创建一个“cron 任务”来为您执行此操作(但使用 cron 调度任务超出了本文的范围)。

使用 Glimpse

现在您已经创建了索引,您可以搜索它。最简单的方法是直接输入

glimpse word

Glimpse 会搜索默认索引(您主目录中的索引),并返回类似于 grep 的输出,并在每个匹配的行前面加上文件名。

也许您的搜索没有找到您要查找的文件;该单词可能在文件中拼写错误。如果您想允许一个字母的拼写错误,您可以改用

glimpse -1 word

也许您的搜索返回了太多匹配项。您可以使用 -F 标志将匹配项限制为仅限文件名与特定模式匹配的文件。要仅在以 .c 结尾的文件中搜索,请使用

glimpse -F '.c$' word

-F 后面的参数是一个完整的正则表达式,类似于 grep 使用的搜索模式。

您不必只索引主目录中的文件。-H 选项指定要索引的不同目录树。索引文件存储在指定的目录中。如果您想索引许多 Linux 发行版提供的 /usr/doc 目录,请以 root 用户(或另一个可以写入 /usr/doc 目录的用户)身份登录并运行

glimpseindex -H /usr/doc

然后任何能够读取 /usr/doc/.glimpse_index 文件的用户都可以使用以下命令搜索这些文档

glimpse -H /usr/doc word

如果您的搜索速度不够快,您可以通过使用 -o 标志运行 glimpseindex 来用磁盘空间换取时间,这表示索引占用被索引文件空间 7% 到 8% 的空间,并略微提高搜索速度;或者使用 -b 标志,这表示索引占用额外 20% 到 30% 的空间,并更大幅度地提高搜索速度。

如果您一直都在搜索,您可以通过在后台运行 glimpseserver 程序来加快搜索速度。这在 glimpseserver 的 man 手册页中有所介绍。

还有什么?

Glimpse 的功能远不止我在这里介绍的这些,所以如果您没有看到您要查找的内容,请在放弃之前尝试一下——或者至少阅读文档。特别是,glimpse 支持 agrep(近似 grep)使用的选项,agrep 是 glimpse 的作者几年前编写的一个流行的搜索程序。agrep 及其 man 手册页包含在 glimpse 发行版中。它的选项包括各种不同的布尔搜索。

Glimpse 也是 Harvest 系统中使用的搜索引擎,根据 Harvest 网站 harvest.cs.colorado.edu 的说法,Harvest 系统“是一套集成的工具,用于收集、提取、组织、搜索、缓存和复制互联网上的相关信息”。

获取 Glimpse

Glimpse 可在 ftp 站点 ftp.cs.arizona.edu 的 glimpse/glimpse.2.1.src.tar.Z 文件中找到。Linux 二进制文件和预配置为在 Linux 下编译的源代码(以及原始源代码)可从 www.ssc.com/lj/issue18/glimpse.html 获取。

如果您想参与 glimpse@cs.arizona.edu 邮件列表,请发送消息至 glimpse-request@cs.arizona.edu 并请求添加。

glimpse 的手册页在线地址为 glimpse.cs.arizona.edu:1994/glimpsehelp.html,glimpse 自己的主页地址为 glimpse.cs.arizona.edu:1994

Michael K. JohnsonLinux Journal 的编辑,他希望自己有空闲时间来假装成为 Linux 大师。

加载 Disqus 评论