在 Linux 中,通常情况下默认使用 find 命令进行文件的搜索,但是 find 命令语法过于繁琐,默认搜索效率低,这时候 fd 命令出现了。
fd 是一款 Rust 语言编写的现代开源文件搜索工具,全称 fd-find,主打简洁、高速、易用,是传统 find 命令的轻量化升级版。
fd 设计的初衷:
简化 find 语法
提升搜索速度
优化使用体验
适配开发场景
fd 并没有随 Linux 发行版默认安装,所有需要手动使用命令安装
Ubuntu/LinuxMint/Debian
sudoapt install fd-find默认安装后命令是 fdfind ,通过别名进行定义为fd。
echo"alias fd=fdfind">> ~/.zshrc
source~/.zshrc
后续在终端中就可以直接输入 fd 来使用它了。
fd [OPTIONS] [PATTERN] [PATH...]PATH:不写默认当前目录递归搜索
PATTERN:默认正则(不是通配符)
默认忽略隐藏文件、忽略 .gitignore/.fdignore 里的文件
-H, --hidden:包含隐藏文件 / 目录
-I, --no-ignore:不读取 .gitignore/.fdignore
-u, --unrestricted:等价于 -HI(全部不忽略)
fd -tf # 只找文件
fd -td # 只找目录
fd -tl # 只找软链接
fd -emd # 所有 .md 文件
fd -etxt -elog # .txt 或 .log
fd -Enode_modules -E'.git'#排除指定内容默认:智能大小写(小写 pattern → 不区分大小写;含大写 → 区分)
--case-sensitive:强制区分
--ignore-case:强制不区分
fd -d2# 最多递归 2 层-x cmd:每条结果并行执行(非常快)
-X cmd:所有结果一次性传给命令(类似 xargs)
fd -ezip -xunzip
fd -etxt -Xcat
-L:跟随软链接
-p:显示完整路径
-h:简短帮助;--help:详细帮助
# 1. 找所有包含 "table" 的文件
fd table

# 2. 找以 Error 开头、.vue 结尾的文件(正则)
fd '^Error.*\.vue$'

# 3. 只在 /etc 下找 .conf 文件
fd -econf . /etc

# 4. 找隐藏的 .env 文件
fd -H'^\.env'

# 5. 排除 build 和 dist 目录找 .js
fd -e js -E build -E dist
# 6. 批量删除所有 .tmp 文件
fd -e tmp -x rm
# 7. 统计所有 .vue 文件行数
fd -e vue -X wc -l
# 8. 只搜 2 层目录结构内包含 table 的文件
fd -d 2 table
# 9. 只搜索文件
fd -t f table
# 10. 只搜索目录
fd -t d table
1. 语法极简,默认行为更合理

find 要记一堆 -name/-iname/-regex,fd更贴近直觉
2. 速度明显更快(并行遍历 + 智能忽略)
fd 用 Rust 编写,多线程并行扫描目录
默认跳过隐藏、gitignore,减少大量无用文件
实测:百万级文件系统,fd 常比 find快几倍到一个数量级
3. 默认彩色输出,可读性强
目录、文件、链接颜色区分,一眼看清类型
find 默认纯文本,要自己配高亮
4. 内置 ignore 机制,开发场景极爽
自动读取:.gitignore、.fdignore、.ignore
项目里 node_modules、dist、.git默认不扫,不用手动排除
5. -x 并行执行,批量处理超高效
fd -ejpg -xconvert {} -resize50% {}_small.jpgfind 要配合 xargs -P 才勉强并行,语法繁琐
6. 更友好的正则 & 大小写
fd:正则默认,小写自动不区分大小写
find:默认通配符,正则要 -regex,大小写控制麻烦
当然 fd 也有不足的地方,例如没有时间 / 权限 / 大小筛选(-mtime、-perm、-size 等)更复杂一些选项筛选。
虽然 fd 不能完全取代 find,但日常使用的大部分场景中 fd 替代 find 来进行操作,效率更高,响应迅速,使用更简单反而能提升工作效率和文件查找效率。