前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在 Linux 上用 fd 代替 find命令

在 Linux 上用 fd 代替 find命令

原创
作者头像
用户1685462
修改2021-09-13 11:35:24
1.6K0
修改2021-09-13 11:35:24
举报
文章被收录于专栏:网站教程网站教程

许多 Linux 程序员在其工作中每天都在使用 find 命令。但是 find 给出的文件系统条目是有限的,如果你要进行大量的 find 操作,它甚至不是很快速。因此,我更喜欢使用 Rust 编写的 fd 命令,因为它提供了合理的默认值,适用于大多数使用情况。

正如它的 README 所说,“fd 是一个在文件系统中寻找条目的程序。它是一个简单、快速和用户友好的 find 的替代品。”它的特点是目录的并行遍历,可以一次搜索多个目录。它支持正则表达式(regex)和基于通配符的模式。

安装 fd

在 Linux 上,你可以从你的软件库中安装 fd(可用的软件包列表可以在 Repology 上的 fd 页面 找到)。 例如,在 Fedora 上:

代码语言:javascript
复制
$ sudo dnf install fd-find

在 macOS 上,可以使用 MacPorts 或 Homebrew。

另外,你也可以使用 Rust 的 Cargo 软件包管理器:

代码语言:javascript
复制
$ cargo install fd-find

使用 fd

要做一个简单的搜索,运行 fd 并在后面跟上要搜索的名字,例如:

代码语言:javascript
复制
$ fd shregistry/src/github.com-1ecc6299db9ec823/cc-1.0.67/src/bin/gcc-shim.rsregistry/src/github.com-1ecc6299db9ec823/exa-0.10.1/completions/completions.bashregistry/src/github.com-1ecc6299db9ec823/exa-0.10.1/completions/completions.fishregistry/src/github.com-1ecc6299db9ec823/exa-0.10.1/completions/completions.zshregistry/src/github.com-1ecc6299db9ec823/exa-0.10.1/xtests/run.shregistry/src/github.com-1ecc6299db9ec823/git2-0.13.18/src/stash.rsregistry/src/github.com-1ecc6299db9ec823/libc-0.2.94/src/unix/solarishregistry/src/github.com-1ecc6299db9ec823/libgit2-sys-0.12.19+1.1.0/libgit2/cmake/SelectHashes.cmakeregistry/src/github.com-1ecc6299db9ec823/libgit2-sys-0.12.19+1.1.0/libgit2/include/git2/stash.hregistry/src/github.com-1ecc6299db9ec823/libgit2-sys-0.12.19+1.1.0/libgit2/include/git2/sys/hashsig.hregistry/src/github.com-1ecc6299db9ec823/libgit2-sys-0.12.19+1.1.0/libgit2/script/backport.shregistry/src/github.com-1ecc6299db9ec823/libgit2-sys-0.12.19+1.1.0/libgit2/script/leaks.shregistry/src/github.com-1ecc6299db9ec823/libgit2-sys-0.12.19+1.1.0/libgit2/script/valgrind.shregistry/src/github.com-1ecc6299db9ec823/libgit2-sys-0.12.19+1.1.0/libgit2/src/config_snapshot.c[...]

如果你想搜索一个特定的目录,可以将目录路径作为 fd 的第二个参数,例如:

代码语言:javascript
复制
$ fd passwd /etc/etc/pam.d/passwd/etc/passwd/etc/passwd-/etc/security/opasswd

要搜索一个特定的文件扩展名,使用 -e 作为选项。例如:

代码语言:javascript
复制
$ fd . '/home/ssur/exa' -e md/home/ssur/exa/README.md/home/ssur/exa/devtools/README.md/home/ssur/exa/man/exa.1.md/home/ssur/exa/man/exa_colors.5.md/home/ssur/exa/xtests/README.md$

你也可以通过提供 -x 或 -X 来执行一个命令。

  • -x/--exec:选项为每个搜索结果(并行)运行一个外部命令。
  • -X/--exec-batch:选项将所有搜索结果作为参数启动一次外部命令。

例如,要递归地找到所有的 ZIP 档案并解压:

代码语言:javascript
复制
$ fd -e zip -x unzip

或者,要列出某个特定目录下在过去 n 天内改变的所有文件,使用--changed-within 选项:

代码语言:javascript
复制
$ fd . '/home/ssur/Work/' --changed-within 10d/home/ssur/Work/wildfly/connector/src/main/java/org/jboss/as/connector/subsystems/data_sources/JdbcDriverAdd.java/home/ssur/Work/wildfly/connector/src/main/java/org/jboss/as/connector/subsystems/data_sources/JdbcExample.java[...]

而要搜索所有在特定天数之前被修改的文件,请使用 --changed-before n 选项:

代码语言:javascript
复制
$ fd . '/home/ssur/Work/' --changed-before 365d

这里,. 作为一个(正则)通配符,指示 fd 返回所有文件。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装 fd
  • 使用 fd
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档