updateb 如何通过避免进行全盘扫描而运行得非常快?由于父文件夹的 mtime 不受子文件夹中文件的影响。
@hugomg 我认为实际上并没有。它应该只更改其直接父级的 mtime。 – @Kusalananda
我搜索过但找不到答案。
答案1
当第一次运行时updatedb
,无法避免扫描每个目录。
但在随后的扫描中,如果目录与数据库mtime
中的旧条目相比没有变化locate
,则没有新文件,也没有新的子目录 - 因此不必扫描整个目录,updatedb
只需使用其旧数据库即可了解任何现有子目录的名称-目录。因此它可以直接检查mtime
这些子目录的 s,并对它们应用相同的规则。
换句话说,如果文件系统自上次updatedb
运行以来没有发生变化,那么唯一updatedb
需要做的就是确认stat()
其数据库中已有的每个目录条目,并检查其mtime
是否保持不变。
只有mtime
已更改的目录才需要完整目录扫描:这将发现任何新的、重命名或删除的文件、链接和子目录。如果发现新的/重命名的子目录,也需要对其进行全面扫描。