[Tool] [搜索] fd: 更现代化的find

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

posted on 2025-10-21 00:29  风惊庭前叶  阅读(4)  评论(0)    收藏  举报