我想加快查询速度,例如:
find root_dir -atime -5
- 查找五天前访问过的文件。
我考虑在db中存储文件系统hieratchy和文件元数据。 你知道任何有用的解决方案吗? 也许存在可以做到这一点的融合文件系统?
答案 0 :(得分:1)
这样的find命令将导致遍历的目录数据和inode位于文件系统缓存中,这就是为什么在第二次运行时,相同的命令通常要快得多。对于遍历文件系统的其他命令也是如此,例如du
。
请注意,数据库的建立也至少需要花费find
的时间。更不用说同步运行以反映数据库中的文件系统更改。有机会完全重建数据库是最快的方法。
所以,我要做的是通过您感兴趣的文件系统部分运行find
(可能是定期的cron作业)。这样,从某种意义上说,你构建了一个内存“数据库”和随后的find
,du
,这样的东西运行得更快。
答案 1 :(得分:1)
这样做没有“真正好”的解决方案。你可以每小时或每天运行一次cron脚本来创建像你这样的数据库,但如果你经常运行它,你将对文件系统施加很大的负担;如果你不经常运行它,你的结果将会过时。
另一种方法是使用内核机制来通知程序有关文件系统更改的信息。查看http://en.wikipedia.org/wiki/Inotify即可开始使用。但是,这是特定于Linux的,它允许您仅监视特定目录,而不是整个文件系统。
答案 2 :(得分:0)
有updatedb
和locate
(相同的包),但需要手动运行更新,并且似乎无法按文件戳进行搜索。如果你要编写自己的解决方案,它可能仍然是一个很好的起点。