如何在 macOS/Linux 安裝 fd 與 bat:找檔案、語法高亮 cat 及與 rg 組合
安裝 fd 與 bat,跑第一條找檔與高亮 cat,並和 rg 串成終端工作流。
在仓库里找檔案用 find、看源码用 cat 很快会嫌慢、难读。fd 与 bat 是 Rust 写的现代替代品:fd 默认尊重 .gitignore 并按名称/扩展名搜路径;bat 给 cat 加上语法高亮、行号与分页。本教學涵蓋 macOS/Linux 安裝、fd 找檔案、bat 讀檔、與 rg/grep 組合,面向 hereink 讀者常用的終端工作流。
檢索詞是如何在 macOS/Linux 安裝 fd 和 bat CLI 工具。讀完應能安裝两个命令、跑第一条 fd 与 bat,并用管道把「找檔案」和「搜内容」串起来。
fd 与 bat 解决什么问题
fd 替代 find 的日常用法
find . -name '*.ts' 语法冗长,还容易扫进 node_modules。fd 默认递归、尊重忽略规则,支持 -e 扩展名、-t 文件类型、大小写开关,適合「先圈出一批文件再处理」。
bat 让 cat 可读
bat src/main.rs 自动检测语言、高亮关键字、显示行号,并接入分页器(可 --paging=never 关掉)。读配置、日志片段或 CI 报错文件时,比裸 cat 少费眼。
上游仓库:
github.com/sharkdp/fd与github.com/sharkdp/bat。安裝后分别运行fd --version与bat --version确认。
在 macOS 与 Linux 安裝
- 1macOS(Homebrew)
brew install fd bat。驗證:which fd bat与版本命令。Apple Silicon 与 Intel 共用同一 formula。 - 2Debian / Ubuntu
sudo apt update && sudo apt install fd-find bat。部分發行版可执行文件名为fdfind;可建立別名alias fd=fdfind或按包文档启用fd命令。驗證:fdfind --version或fd --version。 - 3Fedora / Arch
Fedora:
sudo dnf install fd bat。Arch:sudo pacman -S fd bat。若仓库版本偏旧,可从各项目 GitHub Releases 下载对应架构二进制并加入PATH。 - 4可選:Rust 工具链
已装 Rust 时:
cargo install fd-find bat。编译较慢,適合包管理器未提供新版本的环境。
用 fd 找檔案
# 按名称片段(默认当前目录递归,尊重 .gitignore)
fd config
# 只要 .tsx 文件
fd -e tsx
# 只要普通文件(不含目录)
fd -t f README
# 忽略大小写
fd -i dockerfile
# 指定起始目录
fd \.env$ /etc --followfd 的默认行为与 ripgrep 类似:在 Git 仓库中会读 .gitignore。需要包含被忽略路径时,查阅官方文档中的 --no-ignore 等开关(输出会明显变多)。
用 bat 讀檔(語法高亮 cat)
# 高亮显示整个文件
bat src/lib/utils.ts
# 脚本里不要分页器
bat --paging=never Dockerfile
# 显示行号(默认通常已开)
bat -n package.json
# 一次看多个文件
bat src/*.go主题与缩进可在 ~/.config/bat/config 或环境变量 BAT_THEME 调整;可用 bat --list-themes 查看内置主题。官方 README 说明如何把 bat 设为 cat 别名(按需,非必须)。
与 grep / ripgrep (rg) 组合
| 目标 | 示例 | 说明 |
|---|---|---|
| 只在某类文件里搜 | fd -e py | xargs rg "def main" | 先 fd 圈定 .py,再 rg 搜内容 |
| 搜完立刻高亮读 | rg -l "TODO" src | xargs bat | rg -l 只列文件名,bat 逐个打开 |
| 单文件管道 | rg -n "error" app.log | bat -l log | 对管道结果指定语言 -l log 便于高亮 |
| 经典 grep | fd -e sh | xargs grep -n "set -e" | 未装 rg 时仍可用;rg 通常更快,见站内 ripgrep 教程 |
- 適合
- 每天在 monorepo 里找配置、脚本、日志;想少记 find 参数、让终端阅读代码更清晰的人。
- 不適合
- 需要 GUI 全局搜索或 IDE 重构;在 Windows 上若未装 WSL/包管理器,本稿以 macOS/Linux 包路径为主(Windows 可用 scoop/chocolatey,见各项目 README)。
Ubuntu 裡只有 fdfind 沒有 fd?
Debian 系包名常为 fd-find,二进制是 fdfind。在 shell 設定裡 alias fd=fdfind,或按發行版说明安裝提供 fd 名称的兼容包。
bat 能完全替代 cat 吗?
交互阅读可以;脚本若依赖纯文本 stdout(例如 cat file | other),用 bat --paging=never --plain 或继续用 cat,避免分页器或装饰字符干扰管道。
fd 和 find 该用哪个?
复杂条件(mtime、权限位、exec 删除)仍用 find;按名称/扩展名快速列文件用 fd 更短。两者可并存。
終端搜完,对齐一张图
用 fd/rg 定位到模块后,服务边界仍適合摊在同一张白板上。见 如何建立空間。