fd 是什么
fd 是 Rust 编写的高性能查找工具,定位是“日常够用的 find 替代品”:语法更短、默认彩色输出、自动遵循 .gitignore 并跳过隐藏目录,模式默认按正则匹配。它面向人的交互式查找;在条件组合与可移植性上 find 仍然更完整,目标机器没装 fd 或要写进脚本时,find 依旧是基线选择。
基本信息
| 适用平台 | Linux/macOS(包名 fd-find,Ubuntu/Debian 命令名为 fdfind);Windows 有 scoop/winget 包 |
|---|---|
| 权限要求 | 普通用户即可 |
| 语法 | fd [模式] [路径] [选项] |
| 常用选项 | -H 含隐藏、-I 忽略 .gitignore 类规则、-t 类型、-e 扩展名、-d 深度、-x/-X 执行 |
| 时间过滤 | --changed-within / --changed-before,支持 2d、10m 等写法 |
典型使用场景
- 按扩展名快速找日志、配置与模板(fd -e log、fd -e conf)
- 在代码仓库里按忽略规则找源码文件,自动绕开 node_modules 与 .git
- 找最近改动过的文件,配合发布排查(--changed-within 1d)
- 对匹配结果批量执行命令(-x 逐个、-X 一次性)
- 排查被忽略的敏感文件或产物(加 -I -H 才看得到)
常用示例
常用示例
fd -e log # 按扩展名找日志文件
fd -e conf nginx # 名字含 nginx 的 conf 文件
fd -H config /etc # -H 包含隐藏文件
fd -I -H .env # -I 忽略忽略规则,找到被 .gitignore 排除的文件
fd -t d -d 2 src # 只找目录,限定深度 2 层
fd --changed-within 2d -t f # 最近两天改动过的文件
fd -e tmp -x ls -l # 对每个结果执行命令(逐个执行)
fd -e bak -X rm -v # 一次性批量执行:破坏性操作务必先干跑确认常用选项
| 选项 | 作用 | 注意 |
|---|---|---|
| -H | 包含隐藏文件与目录 | 默认跳过隐藏项,找 .env 之类必须加 |
| -I | 忽略 .gitignore 等忽略规则 | 查被忽略的产物或环境文件时必加 |
| -e 扩展名 | 限定后缀 | 比写通配更直观,可重复使用 |
| -t f/d/l | 限定文件、目录或软链类型 | 对应 find 的 -type |
| -x / -X | 对结果逐个或批量执行命令 | 加破坏性命令前先不加执行、只看清单 |
| --changed-within | 按修改时间过滤 | 支持 2d、10m 这类人类可读写法 |
Ubuntu/Debian 因与已有命令名冲突,把可执行文件装成 fdfind。写脚本时要么按发行版分支,要么自行建立软链接,不要假设命令一定叫 fd。
fd -x / -X 会把命令立刻作用在全部匹配结果上:先跑一遍不带执行的版本确认清单,确认无误再追加执行,尤其是 rm、mv 这类不可逆操作。