目录
01 背景
1.1 简介
fd
是一个用于在文件系统中查找文件和目录的命令行工具。它是传统 find
命令的一个现代化、用户友好且高性能的替代品。
主要特点:
- 简单直观: 语法比
find
更简单易记。默认情况下,你只需要提供搜索模式,它就会在当前目录及其子目录中进行递归搜索。 - 智能大小写: 默认情况下,搜索是不区分大小写的。如果你在模式中使用了大写字母,它会自动切换为区分大小写搜索。
- 速度极快: 得益于 Rust 编程语言的高效实现以及并行遍历目录的能力,
fd
通常比find
快得多。 - 色彩丰富的输出: 默认输出带有颜色高亮,使结果更易读。
- 默认忽略: 自动忽略隐藏文件、目录和
.gitignore
中列出的模式,让它在代码库中搜索时非常高效。 - 通配符支持: 支持使用
*
,?
,[]
等通配符进行模式匹配。
1.2 官网
fd
的Github地址为:GitHub: sharkdp/fd
02 安装
fd
的官方项目名是 fd-find
,但二进制文件名称是 fd
。
# macOS
brew install fd
# Debian/Ubuntu (注意:二进制名称可能是 fdfind)
sudo apt install fd-find
# Arch Linux
sudo pacman -S fd
# Fedora
sudo dnf install fd-find
# 通用方法:从源代码或预编译二进制安装,请参考官网。
注意:在某些系统上,安装后二进制文件可能被命名为 fdfind
。你可以使用别名 alias fd=fdfind
来方便使用。
03 使用
3.0 默认
fd
默认操作是递归搜索当前目录下的文件和文件夹,并应用智能大小写匹配。
# 搜索当前目录下所有包含 "config" 的文件或目录 (不区分大小写)
fd config
3.1 基础搜索
3.1.1 在指定路径搜索
# 在 /etc 目录中搜索所有包含 "conf" 的文件
fd conf /etc
3.1.2 搜索文件类型
使用 -t
或 --type
选项指定类型。
类型别名 | 描述 |
---|---|
f / file |
文件 |
d / directory |
目录 |
l / symlink |
符号链接 |
# 只搜索目录名包含 "src" 的项
fd -t d src
# 只搜索文件且文件名包含 "README" 的项
fd -t f README
3.1.3 使用通配符
使用 -g
或 --glob
启用通配符匹配(默认情况下,模式被视为正则表达式)。
# 搜索所有以 test 开头的 .py 文件
fd -g "test*.py"
3.2 选项与高级搜索
3.2.1 忽略和隐藏文件
选项 | 描述 |
---|---|
-H / --hidden |
包含隐藏文件和目录(默认不包含)。 |
-I / --no-ignore |
忽略 .gitignore 等忽略文件中的规则(默认遵守)。 |
# 搜索包括隐藏文件在内的所有文件
fd -H "dotfile"
# 搜索所有 .log 文件,即使它们被 .gitignore 忽略
fd -I ".log"
3.2.2 限制深度
使用 --max-depth <n>
限制搜索的目录层级。
# 只在当前目录(深度1)和其直接子目录(深度2)中搜索
fd --max-depth 2 ".md"
3.2.3 排除特定目录
使用 -E
或 --exclude
排除匹配给定模式的目录。
# 搜索所有 .js 文件,但排除 node_modules 目录下的结果
fd ".js" -E node_modules
3.2.4 强制区分大小写
使用 -s
或 --case-sensitive
强制进行区分大小写搜索,覆盖智能大小写默认行为。
fd -s "Makefile"
3.3 执行命令 (替代 find -exec
)
使用 -x
或 --exec
对每个搜索结果执行指定的命令。{}
是当前结果路径的占位符。
# 删除所有 .tmp 文件
fd ".tmp" -X rm
# 对所有 .conf 文件运行 ls -l 命令
fd ".conf" -X ls -l
# 将搜索到的所有 .jpg 文件复制到 backup 目录 (使用 -t 指定目标目录)
fd ".jpg" -X cp -t backup
04 参数与变量
fd
的配置主要通过命令行参数,但也可以通过环境变量设置默认行为。
环境变量 | 描述 |
---|---|
FD_OPTIONS |
在任何命令行参数之前应用的默认选项。 |
FD_EXEC_PATH |
在 -x 或 -X 中,{} 占位符的替代。 |
NO_COLOR |
如果设置,禁用彩色输出。 |
# 示例:永久设置 fd 默认为只搜索文件,并包含隐藏文件
export FD_OPTIONS="-t f -H"
# 此时执行 fd test 相当于执行 fd -t f -H test
05 使用场景
场景 | 命令示例 | 优势 (vs find) |
---|---|---|
查找所有配置文件 | fd ".conf" /etc |
语法简单,彩色输出 |
快速删除临时文件 | fd ".bak$" -X rm |
-X (更安全) 替代 find -exec ... {} + |
查找 Git 仓库中所有未忽略的图片 | `fd -t f -E 'dist' '.(png | jpg)'` |
与 fzf 结合 | `vim $(fd -t f | fzf)` |
批量修改文件权限 | fd -t d -x chmod 755 {} |
简洁地对结果执行操作 |
06 总结对比(fd
vs find
)
特性 | fd |
find |
---|---|---|
基本语法 | fd pattern [path] |
find [path] -name pattern |
默认行为 | 递归,忽略隐藏和.gitignore | 递归,搜索所有文件 |
速度 | 快,并行搜索 | 慢 |
输出 | 彩色高亮 | 默认无颜色 |
大小写 | 智能大小写 | 默认区分大小写(需用-iname ) |
执行命令 | -x 或 -X |
-exec |
易用性 | 高,直观 | 低,选项复杂 |
希望这个总结能帮助您更好地了解和使用 fd
!