fd:比 find 快23倍,这个文件搜索工具拿到了4.3万 Star

fd:比 find 快23倍,这个文件搜索工具拿到了4.3万 Star

在命令行里用 find 搜文件,是每个开发者的日常。但每次都要敲 find . -iname '*PATTERN*',输完就觉得该换个方案。

find 默认还会扫 .gitnode_modules 这些目录,输出不带颜色,参数也难记。

所以就有了 fd。用 Rust 写的文件搜索工具,GitHub 上 42,962 颗 Star。

正文顶部截图

README区域截图

默认行为就已经够用

fd 的设计思路是默认值覆盖多数场景。

默认忽略隐藏文件和目录,默认忽略 .gitignore 里的内容,结果带颜色高亮。这些在 find 里都要手动加参数。

用起来也省事。搜一个文件,敲 fd PATTERN 就搞定,不用 -iname,不用通配符。比如搜包含 netfl 的文件:

fd netfl

命令名本身比 find 短了 50%。

支持正则表达式。搜以 x 开头、rc 结尾的文件:

fd '^x.*rc$' /etc

支持按扩展名过滤:

fd -e md

支持 glob 模式匹配:

fd -g libc.so /usr

并行遍历带来的速度

fd 的速度来自并行化的目录遍历。底层用了ripgrep 也在用的 ignoreregex 库,遍历目录树时利用多核。

作者的 benchmark:在约 75 万个子目录、约 400 万个文件的家目录中搜索 [0-9].jpg

  • find 正则模式:约 19.9 秒
  • find -iname 模式:约 11.2 秒
  • fd:约 0.85 秒

大概是 find 的 13 到 23 倍。两台工具找到的 546 个文件一致。

搜到之后还能执行命令

fd 不止是显示结果,还内置了命令执行。

-x 对每个结果分别执行命令。找到 zip 文件并解压:

fd -e zip -x unzip

-X 把结果一次性传给一条命令。找到 Python 测试文件并用 vim 打开:

fd -g 'test_*.py' -X vim

占位符语法也有。{} 是路径,{.} 是不带扩展名的路径,{/} 是文件名,{/.} 是不带扩展名的文件名。批量转换图片格式:

fd -e jpg -x convert {} {.}.png

线程数用 -j 控制,--threads=1 即串行。

隐藏与忽略

fd 默认不搜隐藏文件,不输出 .gitignore 匹配的内容。搜隐藏文件加 -H,不遵守 ignore 规则加 -I,搜全部用 -u

排除目录或文件类型,用 -E

fd -H -E .git ...
fd -E '*.bak' ...

还可以创建 .fdignore 文件,写法和 .gitignore 一致。

生态配合

fdfzf 经常一起用。设置环境变量:

export FZF_DEFAULT_COMMAND='fd --type file --follow --hidden --exclude .git'

之后按 Ctrl+T 就能在 fzf 里浏览 fd 的结果。

ripgrep 配合,在指定类型文件中搜索内容:

fd -e cpp -e h -X rg 'std::cout'

tree 配合,以树形展示结果:

fd --extension rs | tree --fromfile

安装

各平台都支持:

macOS:

brew install fd

Ubuntu/Debian:

apt install fd-find

Arch Linux:

pacman -S fd

Fedora:

dnf install fd-find

Windows:

scoop install fd
choco install fd
winget install sharkdp.fd

也可以用 Cargo 安装:

cargo install fd-find

小结

如果你每天在终端里搜文件,fd 可以放进工具箱。默认行为够用,不用记参数就能用,速度比 find 快一个量级。

posted @ 2026-06-22 11:03  cloudnine36  阅读(7)  评论(0)    收藏  举报