如何在 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,并用管道把「找檔案」和「搜内容」串起来。

fdbrew · apt · dnf
bat语法高亮 · 行号
组合fd · rg · 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 安裝

  1. 1
    macOS(Homebrew)

    brew install fd bat。驗證:which fd bat 与版本命令。Apple Silicon 与 Intel 共用同一 formula。

  2. 2
    Debian / Ubuntu

    sudo apt update && sudo apt install fd-find bat。部分發行版可执行文件名为 fdfind;可建立別名 alias fd=fdfind 或按包文档启用 fd 命令。驗證:fdfind --version 或 fd --version。

  3. 3
    Fedora / Arch

    Fedora:sudo dnf install fd bat。Arch:sudo pacman -S fd bat。若仓库版本偏旧,可从各项目 GitHub Releases 下载对应架构二进制并加入 PATH。

  4. 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 --follow

fd 的默认行为与 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 batrg -l 只列文件名,bat 逐个打开
单文件管道rg -n "error" app.log | bat -l log对管道结果指定语言 -l log 便于高亮
经典 grepfd -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 定位到模块后,服务边界仍適合摊在同一张白板上。见 如何建立空間。

立即開會