为什么locate比find快?

为什么locate比find快?

我在源中查找文件,尝试了locate和find。令人惊讶的是,locate搜索了整个机器,比find更快,find只搜索当前目录和子目录。

以下是我对这两者执行的 shell 命令:

find . -name vendorsetup.sh # takes 50 seconds to search all files in curren -sub directories.

locate vendorsetup.sh # takes 20 seconds to search file in whole machine.

为什么这个?

答案1

locate使用数据库并定期对文件系统进行清点。数据库针对搜索进行了优化。find需要遍历整个子目录,速度很快,但不如locate快。

答案2

关于定位:

Locate 使用存储在 中的索引/var/lib/slocate/,该索引由夜间 Cron 作业更新。此夜间作业通常在当地时间凌晨 1 点或 2 点左右运行,并完全扫描整个系统(包括所有连接的驱动器)。生成的索引只是一个文件名列表。搜索速度如此之快是因为已经对文件系统中的每个元素进行了索引

find事实并非如此,

每次它都会将搜索视为新鲜搜索并且不存储任何文件位置的缓存。

所以需要花费一些时间去寻找。

希望有帮助。

相关内容