我在源中查找文件,尝试了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
事实并非如此,
每次它都会将搜索视为新鲜搜索并且不存储任何文件位置的缓存。
所以需要花费一些时间去寻找。
希望有帮助。