是否存在支持缓存以提升性能的命令行`find`工具版本?
缓存式文件查找:解决大型目录下
find缓慢的方案 当然有办法搞定这个问题!当你在超大目录里用find慢得抓狂时,根本不用找特殊版本的find——咱们用现成工具就能实现类似ctags的文件详情缓存机制:提前构建好文件索引,后续查询直接调用缓存,彻底告别重复遍历庞大目录的痛苦。
最实用的方案:用locate实现自定义目录缓存
locate本身就是靠预生成索引吃饭的快速查找工具,默认会扫描整个系统,但我们可以让它只针对你需要的大型目录生成专属缓存,完美匹配你的需求:
步骤1:创建自定义updatedb配置
先写个配置文件(比如~/.my_bigdir_updatedb.conf),明确指定要扫描的目录、缓存存储位置,避免误排除必要文件:
# 不排除任何文件名 PRUNENAMES="" # 不排除任何路径 PRUNEPATHS="" # 替换成你要缓存的大型目录路径 SEARCHPATHS="/path/to/your/large/target/dir" # 缓存数据库的存放位置 DBFILE="$HOME/.bigdir_locatedb"
步骤2:生成专属目录缓存
运行这条命令生成索引:
updatedb -l 0 -c ~/.my_bigdir_updatedb.conf
注:-l 0表示不跟随符号链接,如果你需要包含符号链接,改成-l 1即可。
步骤3:用缓存快速查找
之后每次查询时,直接指定这个缓存数据库就行:
locate -d $HOME/.bigdir_locatedb "your-search-keyword"
比如要找所有.log文件:
locate -d $HOME/.bigdir_locatedb "*.log"
速度比find快N倍,因为它直接查预生成的索引,不用实时遍历整个目录。
进阶:定期自动更新缓存
就像ctags需要定期更新tags文件一样,你可以把生成缓存的命令加到定时任务(比如cron)里,让缓存自动保持最新:
# 每天凌晨3点自动更新一次缓存 0 3 * * * updatedb -l 0 -c ~/.my_bigdir_updatedb.conf
有没有带原生缓存的find变种?
目前原生的GNU find没有内置缓存功能,但有一些现代替代工具可以结合缓存机制:
plocate:mlocate的现代升级版,索引体积更小、查找速度更快,用法和locate几乎一致,也支持自定义数据库fd(fdfind):虽然默认没有缓存,但可以配合plocate的数据库实现快速查找,或者用脚本自己缓存查询结果
不过对大多数场景来说,自定义locate缓存的方案已经足够简单高效,完全能达到类似ctags缓存文件详情的效果。
内容的提问来源于stack exchange,提问作者Att Righ
相关产品推荐
相关产品推荐

