乐趣区

关于linux:推荐2款文件系统中查找文件的工具

家喻户晓,在 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

退出移动版