如何安裝 fd 快速找檔案:.gitignore 忽略規則、常用 flags 與 find 對照

安裝 fd,讀懂 ignore,flags 速查,何時仍用 find。

在 monorepo 里按文件名找配置或源码,find 能办到但语法绕、还容易扫进 node_modules。fd(sharkdp 的 Rust 工具)把「按路径快速列文件」做成默认递归、默认尊重忽略规则的一行命令。本教學專注 macOS/Linux 安裝 fd、.gitignore 與 .fdignore 等忽略規則、常用 flags,以及與 find 的對照,面向 hereink 讀者與 ripgrep 並用的終端機工作流。

檢索詞是如何安裝 fd 快速找檔案並理解 gitignore 與 find 區別。讀完應能安裝 fd、在项目根跑第一条搜索、读懂默认跳过哪些目录,并知道复杂条件何时仍用 find。

安裝brew · apt · dnf
忽略.gitignore · .fdignore
對照fd vs find
安裝 fd忽略规则常用 flags

fd 解决什么问题

比 find 更短的日常找文件

find . -iname '*config*' 要记住 -iname、引号与起始路径。fd config 默认在当前目录递归,把模式当子串或正则(见 -g)匹配路径,输出一行一个相对路径,適合再管道给 rg、bat 或 xargs。

与 ripgrep 同一套「尊重忽略」

rg 搜内容、fd 圈文件。二者在 Git 仓库里都会读 .gitignore,少扫 dist、target 与依赖目录。站内 bat 教程讲高亮阅读;本篇只讲 fd 找路径。

上游:github.com/sharkdp/fd。安裝后运行 fd --version 确认。

在 macOS 与 Linux 安裝

  1. 1
    macOS(Homebrew)

    brew install fd。驗證:which fd 与 fd --version。

  2. 2
    Debian / Ubuntu

    sudo apt update && sudo apt install fd-find。二进制常为 fdfind;在 shell 配置里 alias fd=fdfind,或按发行版说明启用 fd 命令名。

  3. 3
    Fedora / Arch

    Fedora:sudo dnf install fd。Arch:sudo pacman -S fd。版本偏旧时可从 GitHub Releases 下载对应架构二进制并加入 PATH。

  4. 4
    可选:Rust 工具链

    cargo install fd-find。编译较慢,適合包管理器未提供新版本的环境。

忽略规则:fd 默认跳过什么

在 Git 仓库内,fd 默认启用 ignore 规则,行为与 ripgrep 类似:

  • .gitignore:项目与各子目录中的规则;未跟踪但匹配的路径通常也不列出。
  • .ignore 与全局 ignore 文件(见 man fd 与官方 README 的 ignore 章节)。
  • .fdignore:仅 fd 读取,適合「不想改团队 .gitignore,但本地 fd 要再排除一批路径」。
  • .git 目录本身默认不参与结果(找文件时不会把 .git/objects 当普通文件列出来)。
# 列出会匹配的路径,但仍应用 ignore(正常开发默认)
fd Cargo.toml

# 包含被 .gitignore 忽略的路径(输出会暴增,慎用)
fd --no-ignore vendor

# 不读任何 ignore 文件(含 .gitignore、.fdignore)
fd -I secret

# 仍 respect ignore,但额外匹配隐藏文件/目录(名称以 . 开头)
fd -H .env

# 只搜当前目录一层(不递归)
fd --max-depth 1 Makefile

常用 flags 速查

# 按扩展名(不要写点)
fd -e rs
fd -e ts -e tsx

# 只要普通文件 / 目录 / 符号链接
fd -t f README
fd -t d src
fd -t l

# 忽略大小写
fd -i dockerfile

#  glob 模式(整段路径匹配)
fd -g '*.min.js'

# 排除路径片段(可重复 -E)
fd -E node_modules -E '*.pyc' test

# 对每条结果执行命令(比裸 xargs 更安全处理空格)
fd -e md -x wc -l {}

# 指定起始目录
fd '\.toml$' ./crates

需要跟随符号链接遍历加 -L 或 --follow;只列出目录加 --type directory(同 -t d)。完整列表:fd --help。

fd 与 find 對照

目标fdfind
按名称片段找文件fd configfind . -iname '*config*'
按扩展名fd -e gofind . -name '*.go'
尊重 .gitignore默认开启需配合 git ls-files 或手动 -prune
按修改时间 / 权限不擅长(用 find)find . -mtime -7、-perm
对每条结果执行删除等fd … -x rm {}(先不加 -x 目检)find … -exec rm {} +
最大深度--max-depth N-maxdepth N
可移植性现代 Unix/macOS 友好;Windows 见官方POSIX,脚本里更常见

组合示例:fd -e py | xargs rg 'def main' 先圈 Python 再搜内容;含空格路径优先 fd … -x rg pattern {}。

適合
每天在仓库里按名称/扩展名列文件、写脚本前快速圈定范围、与 rg/bat 同一栈的人。
不適合
纯按 mtime 清理磁盘、复杂布尔条件或必须在最小容器镜像里只依赖 POSIX 的运维脚本——保留 find。
Ubuntu 只有 fdfind 没有 fd?

包名 fd-find 提供 fdfind。在 ~/.bashrc 或 ~/.zshrc 里 alias fd=fdfind,或安裝提供 fd 名称的兼容包。

fd 和站内 fd+bat 教程重复吗?

那篇同时讲 bat 语法高亮 cat 与管道组合;本篇深入 fd 的 ignore 与 find 對照。两篇可互补阅读。

模式是正则还是子串?

默认模式多为子串匹配(取决于版本与是否启用正则选项);要 shell 式 glob 用 -g。拿不准时先不加选项试 fd 片段,再加 -g 或查 fd --help 的 SEARCH 说明。

圈定模組後對齊一張圖

用 fd 定位服务或包边界后,架构仍適合摊在同一张白板上。见 如何建立空間。

立即開會