家喻户晓,在 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 database
PRUNEPATHS="/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 png
go/src/github.com/Go-zh/tour/static/img/gopher.png
go/src/github.com/Go-zh/tour/content/img/tree.png
go/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.rules
bash_completion.d/docker-compose.bash
sysconfig/docker
还能够应用 -x
选项将后果输入给其余命令进行操作(相似 find 命令的 –exec 选项),例如
$ fd -d 1 -e png -x convert {} {.}.jpg
这将查找当前目录下的所有 PNG 文件,并转换为 JPG 文件。下面的命令中应用到了占位符 {}
和 {.}
,看如下示例展现占位符所代表的后果
❯ fd 'recognition.db' -x echo {}
Pictures/recognition.db
Pictures/Photos/recognition.db
❯ fd 'recognition.db' -x echo {.}
Pictures/Photos/recognition
Pictures/recognition
❯ fd 'recognition.db' -x echo {/}
recognition.db
recognition.db
❯ fd 'recognition.db' -x echo {//}
Pictures
Pictures/Photos
❯ fd 'recognition.db' -x echo {/.}
recognition
recognition
通过占位符,能够很不便的对文件进行相干操作。更多的 fd 命令选项,能够查看 fd --help
。
如果想在 Windows 上应用 fd,能够通过 Scoop 包管理器装置,关上 PowerShell
-> scoop install fd
总结
这里介绍了两款在文件系统中通过文件名匹配疾速查找文件的工具,mlocate 应用了索引文件,所以在全局查找文件时的效率很高。而 fd 工具提供了很多的性能,在大部分场景下可代替 find 命令来应用,而性能也高于 find 命令。补充,fd 工具的开发者除了这个工具外,还开发了其余很实用的工具,例如 bat – 一个能够代替 cat 命令的工具,其余反对很多编程语言的语法高亮的模式来输入文件内容,也举荐应用。
同时公布在 Mengz’s Blog