我有一个包含许多文本文件的目录树。我想索引所有这些文件的全文(忽略具有某些文件扩展名的文件),以便我可以快速搜索所有文件。
我不想索引我的整个主目录或整个系统。我只想索引这个特定的目录。
索引应该不断更新,自动检测内部文件的变化。
我可以使用什么工具来实现此目的?
答案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
以有趣的顺序输出匹配项。它在内部进行哈希处理或其他操作。