fd:比 find 快23倍,这个文件搜索工具拿到了4.3万 Star
fd:比 find 快23倍,这个文件搜索工具拿到了4.3万 Star
在命令行里用 find 搜文件,是每个开发者的日常。但每次都要敲 find . -iname '*PATTERN*',输完就觉得该换个方案。
find 默认还会扫 .git、node_modules 这些目录,输出不带颜色,参数也难记。
所以就有了 fd。用 Rust 写的文件搜索工具,GitHub 上 42,962 颗 Star。


默认行为就已经够用
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 也在用的 ignore 和 regex 库,遍历目录树时利用多核。
作者的 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 一致。
生态配合
fd 和 fzf 经常一起用。设置环境变量:
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 快一个量级。

浙公网安备 33010602011771号