家喻户晓,在Linux或者类Unix的文件系统中,想通过文件名关键字查找文件,能够通过find命令。那本文将举荐2款能够疾速查找文件的工具,性能比find命令更好,可在某些场景下替换find的应用。

mlocate

大部分的Linux发行版的都提供了 mlocate 软件包,该软件包蕴含了一个locate命令用于查找文件,和一个updatedb命令用于更新文件索引供locate应用。

可间接通过零碎的软件包管理工具间接装置

# CentOS/RHEL$ sudo dnf install mlocate# Debian/Ubuntu$ sudo apt install mlocate

装置实现后,首先须要执行以下命令进行文件索引

sudo updatedb

索引文件将默认寄存在 /var/lib/mlocate/mlocatedb ,也能够批改配置文件 /etc/updatedb.conf 文件,增加某些不须要索引的文件夹,例如

# Paths which are pruned from updatedb databasePRUNEPATHS="/tmp /var/tmp /var/cache /var/lock /var/run /var/spool /mnt /cdrom /usr/tmp /proc /media /sys /.snapshots /var/run/media"

实现索引之后,就能够应用 locate <pattern> 命令进行文件查找了,例如

$ locate mlocate/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 或者 man locate

接下来咱们将介绍另一款find的代替平 - fd 。

fd

fd是一款由David Peter开发的开源工具,用于在文件系统中查找文件,在大部分状况下能够替换find命令。

fd可用于多个平台,包含大部分的Linux发行版,MacOS,Windows,具体装置可查看 https://github.com/sharkdp/fd... 。

例如能够应用 HomeBrew/LinuxBrew 进行装置

$ brew install fd

装置实现后,就能够间接应用,例如查找以后文件夹下以 png 为扩展名的文件

$ fd -e pnggo/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/ -t f 'docker'audit/rules.d/docker.rulesbash_completion.d/docker-compose.bashsysconfig/docker

还能够应用 -x 选项将后果输入给其余命令进行操作(相似find命令的--exec选项),例如

$ fd -d 1 -e png -x convert {} {.}.jpg

这将查找当前目录下的所有PNG文件,并转换为JPG文件。下面的命令中应用到了占位符 {}{.} ,看如下示例展现占位符所代表的后果

❯ fd 'recognition.db' -x echo {}Pictures/recognition.dbPictures/Photos/recognition.db❯ fd 'recognition.db' -x echo {.}Pictures/Photos/recognitionPictures/recognition❯ fd 'recognition.db' -x echo {/}recognition.dbrecognition.db❯ fd 'recognition.db' -x echo {//}PicturesPictures/Photos❯ fd 'recognition.db' -x echo {/.}recognitionrecognition

通过占位符,能够很不便的对文件进行相干操作。更多的fd命令选项,能够查看 fd --help

如果想在Windows上应用fd,能够通过 Scoop 包管理器装置,关上PowerShell

-> scoop install fd

总结

这里介绍了两款在文件系统中通过文件名匹配疾速查找文件的工具,mlocate应用了索引文件,所以在全局查找文件时的效率很高。而fd工具提供了很多的性能,在大部分场景下可代替find命令来应用,而性能也高于find命令。补充,fd工具的开发者除了这个工具外,还开发了其余很实用的工具,例如bat - 一个能够代替cat命令的工具,其余反对很多编程语言的语法高亮的模式来输入文件内容,也举荐应用。

同时公布在 Mengz's Blog