索引和搜索目录

索引和搜索目录

我有一个包含许多文本文件的目录树。我想索引所有这些文件的全文(忽略具有某些文件扩展名的文件),以便我可以快速搜索所有文件。

我不想索引我的整个主目录或整个系统。我只想索引这个特定的目录。

索引应该不断更新,自动检测内部文件的变化。

我可以使用什么工具来实现此目的?

答案1

除了“自动检测文件中的更改”的要求外,这可以由 GNU 来完成id-utils。这提供了一个名为 的工具,mkid它构建了一个名为 的二进制数据库文件,供查询工具和其他工具ID使用。lid

Id-utils 面向编程;它根据可配置id-lang.map文件通过后缀识别文件类型。对于它支持的每种类型,它都有一个单独的扫描仪,以便正确处理文件中的令牌。有一个用于文本文件的后备扫描仪,mkid我认为它可以用作无法识别的文件类型的后备扫描仪。我认为如果您直接mkid指向一个空白id-lang.map文件,它将使用文本扫描仪来处理所有内容。

mkid索引树的速度相当快,查询速度快如闪电。

我已经将它与Vim集成用于源代码浏览;它比使用 cscope 这样的单独工具更方便。通过这两个设置:

:set grepprg=lid\ --regex\ --result=grep\ '$*'\ \\\|\ sort\ -u\ -t\ :\ -k\ 1,1\ -k\ 2,2n
:set grepformat=%f:%l:%m

我可以使用 ID 数据库作为 Vim 命令的基础:grep。例如,会显示找到的:grep foo所有位置的可导航列表。foo

sort上述定义中的步骤是grepprg必需的,因为lid以有趣的顺序输出匹配项。它在内部进行哈希处理或其他操作。

相关内容