使用linux中的索引编制文件搜索算法

时间:2009-03-30 20:48:20

标签: linux algorithm

我想在linux中使用索引实现文件搜索程序......我知道还有其他几个文件搜索程序,比如beagled。但我这样做是为了研究目的...我对如何做索引感到震惊..我有以下的想法,我从maemo-mapper应用程序.. 例如,如果你有一个名为“suresh”的文件,它在文件系统中的索引为文件...

/home/$USERNAME/.file_search_index/s/u/r/e/s/h/list.txt ..此list.txt包含name =“suresh”的所有文件的位置...请提示一个更好的想法/算法来实现它...如果有各种文件搜索技术的任何材料请发布....

2 个答案:

答案 0 :(得分:4)

您还没有看到findutils附带的locate命令?像beagled一样,它是免费软件,所以你可以研究代码。

findutils包总是在寻找贡献者。

有关数据库格式的信息位于http://www.gnu.org/software/findutils/manual/html_node/find_html/Database-Formats.html

答案 1 :(得分:2)

Beagle使用了一种非常有趣的inotify方法。它启动,在父目录上建立一个监视并启动另一个执行递归扫描的线程。随着访问更多目录,父母看到它们并添加更多手表,同时观察它已经知道的内容。

所以,当它开始时,你正在以相当便宜的方式观看整棵树(每个目录一只手表),并将整个事情编入索引。这也有助于确保扫描过程中没有文件被“遗漏”。

所以,这是你的大部分战斗..通常FS搜索程序在编制索引时会遇到困难,例如'updatedb'。

至于存储索引,我不赞成在目录中将其拆分。你本质上是在文件名数组中的每个字符上调用stat()。例如,some-very-long-shared-object-name.so.0将对名称中的每个字符一次调用stat()。您可以尝试使用设计良好的SQLite3数据库。

我正在开发一种非常相似的程序,一种程序可以为PCI认证(信用卡处理器)提供稍微便宜的审计手段,而不使用内核审计挂钩。