title: “怎么用 fd 给 Yazi 提速:Linux 文件搜索工作流”
date: 2026-09-04
categories: [“Linux 软件”]
tags: [“Yazi”, “fd”, “终端”, “文件管理器”, “Rust”, “Linux 软件”]

如果你常驻终端,光是打个 find . -type f -name "*.ts" -not -path "*/node_modules/*" 找一个配置文件就觉得烦,Yazi + fd 是更现代的替代。两个都是 Rust 写的,MIT/Apache-2.0 双许可,而且 — 大多数博客都不会提 — Yazi 默认就集成 fd,不用任何额外配置。装好两者,Yazi 里按 / 搜索,底下就是 fd 在跑。
写作时最新版本:Yazi v26.9.1(2026 年 9 月)、fd v10.5.0。两个都迭代很快;API 一年多没大动。这篇覆盖 Debian/Ubuntu、Fedora、macOS 的安装,再走一遍 Yazi 里搜索/过滤的实际工作流,然后坦率说一下什么时候 find 仍然是更合适的工具。
Yazi 实际上能给你什么
Yazi(日语”鸭”的意思)是个用 Rust 写的终端文件管理器,MIT 许可,有几个实际上很重要的特性:
- 全异步 I/O。 文件列表、预览、复制/移动都跑在 Tokio runtime 上。拷 10 GB 目录不会卡 UI。
- 内置图片预览走 Kitty graphics protocol、iTerm2 inline images、Sixel,降级到 Überzug++/Chafa。tmux、Zellij、裸终端都支持。
- VFS 层统一处理本地文件、SFTP、压缩包、自定义 provider。打开
.tar.gz跟cd进目录一样。 - 并发插件系统用 Lua,加上包管理器(
ya)按名字装插件和主题。 - 原生集成
fd、ripgrep、fzf、zoxide。 这就是本文剩下的角度。
Yazi 自己也承认”公测阶段,能当日常用,会有破坏性改动”。到 v26.9.1 已经够稳可以上工作站,但跨小版本升级时看一眼migration notes 没坏处。
fd 带来了什么
fd 是用 Rust 重写的 find,几乎所有人用了一次就回不去。Apache-2.0/MIT,作者也是 bat 和 hyperfine 那个 sharkdp。它的卖点:
- 默认就合理。 递归搜索、自动跳过隐藏文件、尊重
.gitignore、默认大小写不敏感、支持正则。 - 更干净的语法。
fd "*.rs"替代find . -type f -name "*.rs"。 - 彩色输出,跟着终端配色走。
- 并行遍历默认开 — 4 百万文件的 home 目录,同样的查询比
find -iname快约 13 倍。
fd 唯一干不了的是POSIX 可移植。脚本要跑 Alpine 的 BusyBox、macOS 的 BSD find、或者老 AIX,只能 find。交互用,fd 赢。

图:AI 生成的 find vs fd 语法对比图。写作时没拿到真实截图。
先装 fd
Yazi 是 shell out 到 fd,所以先装它。最快的几条路:
Debian/Ubuntu
sudo apt install fd-findDebian 包里二进制叫 fdfind(fd 这名字被占了)。做个软链,让 Yazi 和你肌肉记忆都能用 fd:
sudo ln -s $(which fdfind) /usr/local/bin/fd验证:
fd --version
fd "*.toml" ~/projects | headFedora/RHEL
sudo dnf install fd-find这里的二进制就叫 fd,不用软链。
macOS
brew install fd其他
- Arch —
pacman -S fd(二进制是fd) - Nix —
nix-env -i fd - 从源码 —
cargo install fd-find(要 Rust ≥ 1.90) - 静态二进制 — 从 fd releases 页 拿
musl压缩包,可移植、零依赖。
一个值得知道的事:fd 默认跳过隐藏文件、.gitignore 里的项、以及 .git/ 目录本身。如果想要全部,加 -u / --unrestricted。在 Yazi 里这有影响 — 看下面。
装 Yazi
Yazi 自 v26.8.15 起提供官方 Debian/Ubuntu APT 源,这是最干净的装法:
Debian/Ubuntu(官方 APT 源 — 推荐)
curl -fsSL https://download.opensuse.org/repositories/home:/sxyazi/Debian_Unstable/Release.key
| sudo gpg --dearmor -o /etc/apt/keyrings/yazi.gpg
echo "deb [signed-by=/etc/apt/keyrings/yazi.gpg] https://download.opensuse.org/repositories/home:/sxyazi/Debian_Unstable/ /"
| sudo tee /etc/apt/sources.list.d/yazi.list
sudo apt update
sudo apt install yaziFedora/RHEL
sudo dnf install yaziArch/Manjaro
sudo pacman -S yazimacOS
brew install yaziCargo(任何发行版、任何平台)
cargo install yazi --locked装完 yazi 上 $PATH。在任意目录启动:
cd ~/projects && yazi首次启动体检:按 ~ 进 home,然后按 / 开始搜索。
真正重要的搜索工作流
Yazi 里你要关心这几个键:
| 键 | 动作 |
|---|---|
/ |
增量搜索当前目录(由 fd 驱动) |
s |
搜索并跳到第一个匹配项(由 fd 或 ripgrep 驱动) |
f |
用子串过滤当前视图 |
Ctrl+R |
刷新当前视图 |
: 然后 cd <路径> |
切目录,自动 zoxide 补全 |
s 和 / 默认都调 fd — 这就是集成。相关配置在 ~/.config/yazi/yazi.toml:
[search]
fd_cmd = "fd"
fd_args = ["--hidden", "--no-ignore"]
ripgrep_cmd = "rg"上面这个配置下,/foo 实际跑的就是 fd --hidden --no-ignore foo — 不过滤 .gitignore,包含隐藏文件。如果想让 Yazi 尊重 .gitignore 并跳过 node_modules、target/、.venv 等,把 --no-ignore 删掉。
增量搜索分步走
- 在嘈杂的项目里打开 Yazi:
yazi ~/projects/some-monorepo。 - 按
/,底栏出现fd>。 - 输入
migrations。你边打字,Yazi 边用fd遍历,实时更新列表 — 每个匹配的留下,不匹配的消失。 - 按
Enter确认,按Esc取消,回到未过滤视图。
这就是杀手锏。用 find 你要么拿到一个扁平输出(find . -name migrations | less),要么用 find ... -exec vim {} + 这种 hack。Yazi + fd 你一直在 TUI 里,边走边预览,命中就能操作(Enter 切过去、o 打开、Space 多选)。

图:AI 生成的 fd 增量搜索过滤目录树示意图。
用 s 跳到文件
按 s,输入 package.json,Yazi 直接跳到第一个匹配、高亮它、右栏显示预览。按 n 跳到下一个匹配,N 跳到上一个。这就是你以前用 find . -name package.json | fzf 或 fzf 的 Ctrl+T 干的事 — 只不过留在 Yazi 里。
如果你的 monorepo 里有 50 个 package.json,s + Enter + n + n + n 比任何外部 fzf 调用都快。
两个跟 fd 配合得好的 Yazi 插件
Yazi 的包管理器(ya)按名字装 Lua 插件。两个会用到 fd:
fd-nya.yazi — 在 UI 上切换 fd 参数
ya pkg add yazi-rs/plugins:fd-nya加一个状态栏开关,在忽略/不忽略之间临时切 fd 参数。在代码仓库里突然要看 .env.local 或 .git/config 的时候有用。
git.yazi — git 状态浮层(底层也用 fd)
ya pkg add yazi-rs/plugins:git在每个文件旁边显示 modified/untracked 徽章。内部用 fd --hidden --no-ignore . <path> 遍历。如果你在 Yazi 里做开发,这个插件加上 fd 就是你真正想要的组合。
加完插件后:
ya pkg update什么时候 find 仍是更合适的工具
fd 更快更友好,但有些真场景 find 赢了:
- 可移植脚本。 Dockerfile、Makefile recipe、CI step 里的命令要在没装
fd的系统上也能跑。find -print0 | xargs -0 ...是通用的。 -newer、-mtime、-prune这一族。 “过去 7 天改过的文件”、”遍历/etc但跳过/etc/ssh“,find的原语经过多年考验,大家都会。fd也有等价项(--changed-within、--max-depth、--exclude),但文档少。- 文件系统层查询。
find -inum、find -samefile、find -mount— 走 inode 或 reflink 的 —fd不建模。 - 系统管理。
sudo find / -perm -4000查 SUID,find /tmp -atime +30 -delete清缓存 — 这是find的主场,管理员都用它。
诚实规则:交互用 fd,脚本里留 find。
串起来 — 30 秒工作流
进一个乱糟糟的 repo,30 秒内找到一个配置文件:
cd ~/projects/big-monorepo
yazi # 启动 Yazi
# 按 '/',输入 'tsconfig',看着 fd 实时过滤
# 按 's',输入 'tsconfig.json',Enter 跳到第一个命中
# 按 'n' 在命中之间跳
# 命中的文件上按 'Enter' 切过去,或 'o' 用 $EDITOR 打开不用鼠标、不用 cd 命令、不用 find | less 管道。这就是 Yazi + fd 在 2026 值得组合在一起的全部理由。
下一步
- Yazi 官方文档:https://yazi-rs.github.io/docs/installation
- “Why is Yazi Fast?”:https://yazi-rs.github.io/blog/why-is-yazi-fast
fdvsfind基准:https://github.com/sharkdp/fd#benchmark- Yazi 插件索引:https://github.com/yazi-rs/plugins
- 如果你哪天 Yazi 不够用,想试图形化 TUI,看看
superfile或lf。它们默认没fd集成,但都是合格的备胎。
两个都装好,在 Yazi 里试试 / 键,剩下的自己就跑通了。
评论