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

AI 生成的 Rust 终端文件管理器插图 — 非官方 Yazi 截图

如果你常驻终端,光是打个 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.gzcd 进目录一样。
  • 并发插件系统用 Lua,加上包管理器(ya)按名字装插件和主题。
  • 原生集成 fdripgrepfzfzoxide 这就是本文剩下的角度。

Yazi 自己也承认”公测阶段,能当日常用,会有破坏性改动”。到 v26.9.1 已经够稳可以上工作站,但跨小版本升级时看一眼migration notes 没坏处。

fd 带来了什么

fd 是用 Rust 重写的 find,几乎所有人用了一次就回不去。Apache-2.0/MIT,作者也是 bathyperfine 那个 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 命令语法对比图(搜索 TypeScript 配置文件)

图:AI 生成的 find vs fd 语法对比图。写作时没拿到真实截图。

先装 fd

Yazi 是 shell out 到 fd,所以先装它。最快的几条路:

Debian/Ubuntu

Shell
sudo apt install fd-find

Debian 包里二进制叫 fdfind(fd 这名字被占了)。做个软链,让 Yazi 和你肌肉记忆都能用 fd:

Shell
sudo ln -s $(which fdfind) /usr/local/bin/fd

验证:

Shell
fd --version
fd "*.toml" ~/projects | head

Fedora/RHEL

Shell
sudo dnf install fd-find

这里的二进制就叫 fd,不用软链。

macOS

Shell
brew install fd

其他

  • Archpacman -S fd(二进制是 fd)
  • Nixnix-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 源 — 推荐)

Shell
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 yazi

Fedora/RHEL

Shell
sudo dnf install yazi

Arch/Manjaro

Shell
sudo pacman -S yazi

macOS

Shell
brew install yazi

Cargo(任何发行版、任何平台)

Shell
cargo install yazi --locked

装完 yazi$PATH。在任意目录启动:

Shell
cd ~/projects && yazi

首次启动体检:按 ~ 进 home,然后按 / 开始搜索。

真正重要的搜索工作流

Yazi 里你要关心这几个键:

动作
/ 增量搜索当前目录(由 fd 驱动)
s 搜索并跳到第一个匹配项(由 fdripgrep 驱动)
f 用子串过滤当前视图
Ctrl+R 刷新当前视图
: 然后 cd <路径> 切目录,自动 zoxide 补全

s/ 默认都调 fd — 这就是集成。相关配置在 ~/.config/yazi/yazi.toml:

Toml
[search]
fd_cmd = "fd"
fd_args = ["--hidden", "--no-ignore"]
ripgrep_cmd = "rg"

上面这个配置下,/foo 实际跑的就是 fd --hidden --no-ignore foo — 不过滤 .gitignore,包含隐藏文件。如果想让 Yazi 尊重 .gitignore 并跳过 node_modulestarget/.venv 等,把 --no-ignore 删掉。

增量搜索分步走

  1. 在嘈杂的项目里打开 Yazi:yazi ~/projects/some-monorepo
  2. /,底栏出现 fd>
  3. 输入 migrations。你边打字,Yazi 边用 fd 遍历,实时更新列表 — 每个匹配的留下,不匹配的消失。
  4. Enter 确认,按 Esc 取消,回到未过滤视图。

这就是杀手锏。用 find 你要么拿到一个扁平输出(find . -name migrations | less),要么用 find ... -exec vim {} + 这种 hack。Yazi + fd 你一直在 TUI 里,边走边预览,命中就能操作(Enter 切过去、o 打开、Space 多选)。

AI 生成的 fd 增量搜索过滤目录树示意图

图:AI 生成的 fd 增量搜索过滤目录树示意图。

s 跳到文件

s,输入 package.json,Yazi 直接跳到第一个匹配、高亮它、右栏显示预览。按 n 跳到下一个匹配,N 跳到上一个。这就是你以前用 find . -name package.json | fzffzfCtrl+T 干的事 — 只不过留在 Yazi 里。

如果你的 monorepo 里有 50 个 package.json,s + Enter + n + n + n 比任何外部 fzf 调用都快。

两个跟 fd 配合得好的 Yazi 插件

Yazi 的包管理器(ya)按名字装 Lua 插件。两个会用到 fd:

fd-nya.yazi — 在 UI 上切换 fd 参数

Shell
ya pkg add yazi-rs/plugins:fd-nya

加一个状态栏开关,在忽略/不忽略之间临时切 fd 参数。在代码仓库里突然要看 .env.local.git/config 的时候有用。

git.yazi — git 状态浮层(底层也用 fd)

Shell
ya pkg add yazi-rs/plugins:git

在每个文件旁边显示 modified/untracked 徽章。内部用 fd --hidden --no-ignore . <path> 遍历。如果你在 Yazi 里做开发,这个插件加上 fd 就是你真正想要的组合。

加完插件后:

Shell
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 -inumfind -samefilefind -mount — 走 inode 或 reflink 的 — fd 不建模。
  • 系统管理。 sudo find / -perm -4000 查 SUID,find /tmp -atime +30 -delete 清缓存 — 这是 find 的主场,管理员都用它。

诚实规则:交互用 fd,脚本里留 find

串起来 — 30 秒工作流

进一个乱糟糟的 repo,30 秒内找到一个配置文件:

Shell
cd ~/projects/big-monorepo
yazi                          # 启动 Yazi
# 按 '/',输入 'tsconfig',看着 fd 实时过滤
# 按 's',输入 'tsconfig.json',Enter 跳到第一个命中
# 按 'n' 在命中之间跳
# 命中的文件上按 'Enter' 切过去,或 'o' 用 $EDITOR 打开

不用鼠标、不用 cd 命令、不用 find | less 管道。这就是 Yazi + fd 在 2026 值得组合在一起的全部理由。

下一步

两个都装好,在 Yazi 里试试 / 键,剩下的自己就跑通了。

最后修改: 2026年9月4日

作者

评论

发表评论

您的邮箱地址不会被公开。