众所周知,在Linux或者类Unix文件系统中,如果想通过文件名关键字来查找文件,可以使用find命令。那么本文将推荐2款可以快速查找文件的工具,性能优于find命令,在某些场景下可以替代find的使用。mlocate大多数Linux发行版都提供mlocate包,其中包含用于查找文件的locate命令和用于更新文件索引以供locate使用的updatedb命令。可以直接通过系统的软件包管理工具安装#CentOS/RHEL$sudodnfinstallmlocate#Debian/Ubuntu$sudoaptinstallmlocate安装完成后首先需要执行如下命令对文件进行索引sudoupdatedb索引文件默认会存放在/var/lib/mlocate/mlocateb中,也可以修改配置文件/etc/updatedb.conf文件,添加一些不需要索引的文件夹,例如#Pathswhichare从updatedb数据库中删除media”建立索引后,可以使用locate命令进行文件搜索,例如$locatemlocate/etc/systemd/system/timers.target.wants/mlocate.timer/usr/bin/rpmlocate/usr/lib/systemd/system/mlocate.service/usr/lib/systemd/system/mlocate.timer/usr/sbin/rcmlocate/usr/share/doc/packages/mlocate/usr/share/doc/packages/mlocate/AUTHORS/usr/share/doc/packages/mlocate/ChangeLog/usr/share/doc/packages/mlocate/NEWS/usr/share/doc/packages/mlocate/README/usr/share/licenses/mlocate/usr/share/licenses/mlocate/COPYING/usr/share/man/man5/mlocate.db。5.gz/var/lib/mlocate/var/lib/mlocate/mlocate.db/var/lib/mlocate/mlocate.db.9O5YsQ/var/lib/systemd/migrated/mlocate/var/lib/systemd/timers/stamp-mlocate.timer可以使用-b选项进行精确匹配,比如下面两个查询结果差异$locate-b'\updatedb'/usr/bin/updatedb注意使用-b时需要在\$locate'updatedb'/etc/updatedb.conf/etc/apparmor.d/usr之前搜索键。bin.updatedb/usr/bin/updatedb/usr/share/augeas/lenses/dist/updatedb.aug/usr/share/man/man5/updatedb.conf.5.gz/usr/share/man/man8/updatedb。8.gz/usr/share/nvim/runtime/ftplugin/updatedb.vim/usr/share/nvim/runtime/syntax/updatedb.vim/usr/share/vim/vim80/ftplugin/updatedb.vim/usr/share/vim/vim80/syntax/updatedb.vim也可以使用-r进行基本的正则表达式模式匹配搜索,你可以查看locate--help或manlocate。接下来我们将介绍另一种查找替代ping——fd。fdfd是DavidPeter开发的用于在文件系统中查找文件的开源工具,在大多数情况下可以替代find命令。fd可以在多个平台上使用,包括大多数Linux发行版、MacOS、Windows,具体安装可以在https://github.com/sharkdp/fd...找到。比如可以使用HomeBrew/LinuxBrew来安装$brewinstallfd安装完成后可以直接使用,比如在当前文件夹中查找png扩展名的文件$fd-epnggo/src/github。com/Go-zh/tour/static/img/gopher.pnggo/src/github.com/Go-zh/tour/content/img/tree.pnggo/src/github.com/containous/yaegi/doc/images/yaegi.png...注意fd命令默认搜索路径为当前目录。您可以使用--base-directory或--search-path指定搜索路径。比如我们在/etc/下搜索匹配docker的常规文件$fd--base-directory/etc/-tf'docker'audit/rules.d/docker.rulesbash_completion.d/docker-compose.bashsysconfig/docker即可也可以使用-x选项将结果输出到其他命令进行操作(类似于find命令的--exec选项),eg$fd-d1-epng-xconvert{}{.}.jpg这样会查找当前目录中的所有PNG文件并将它们转换为JPG文件。上面命令中使用了占位符{}和{.},看下面的例子展示占位符代表的结果?fd'recognition.db'-xecho{}Pictures/recognition.dbPictures/Photos/recognition.db?fd'recognition.db'-xecho{.}Pictures/Photos/recognitionPictures/recognition?fd'recognition.db'-xecho{/}recognition.dbrecognition.db?fd'recognition.db'-xecho{//}PicturesPictures/Photos?fd'recognition.db'-xecho{/.}recognitionrecognition可以很方便的通过占位符对文件进行相关操作。有关更多fd命令选项,请参阅fd--help。如果想在Windows上使用fd,可以通过Scoop包管理器进行安装,打开PowerShell->scoopinstallfd总结这里有两个工具可以通过匹配文件名在文件系统中快速查找文件。mlocate使用索引文件,因此在全局查找文件时非常高效。fd工具提供了很多功能,在大多数场景下可以代替find命令使用,性能也高于find命令。另外,fd工具的开发者除了这个工具还开发了其他有用的工具,比如bat——可以替代cat命令的工具,以及其他支持多种编程语言输出文件内容的语法高亮格式,也推荐使用。也发布在Mengz的博客上