终端文件查找工具:fd

小伙伴们,大家好,我是小溪,见字如面。在探索提升命令行终端执行效率时发现一个高性能文件查找工具fd,今天了解一下基本使用方式。

当前使用版本

fd 10.4.2

优势

  • Rust编写有极高的执行速度

  • 跨平台兼容

  • 开箱即用

限制

  • POSIX 标准兼容性不足,无法直接替代find

  • 默认过滤可能导致"漏搜"

简介

fd 是一款由 Rust 开发的命令行文件查找工具,旨在作为 find 的快速、实用且人性化的替代方案。它通过多线程并行扫描实现极高的搜索性能,拥有更简洁的语法和色彩丰富的输出,并默认采用"智能大小写"匹配、自动忽略隐藏文件及 .gitignore 中的内容,让文件搜索变得既高效又直观。

Github地址:github.com/sharkdp/fd

安装方式

Homebrew

shell 复制代码
$ brew install fd

Ubuntu

shell 复制代码
$ apt install fd-find

Arch Linux

shell 复制代码
$ pacman -S fd

安装完成后,在命令行终端输入 fd -V 查看安装结果

基本使用

命令行参数

命令参数解析如下:

  • -H, --hidden:搜索隐藏文件和目录

  • -I, --no-ignore:不要忽略 .(git|fd)ignore 文件

  • -s, --case-sensitive:区分大小写搜索(默认:智能大小写模式)

  • -i, --ignore-case:不区分大小写搜索(默认:智能大小写模式)

  • -g, --glob:使用基于 Glob 的搜索(默认:正则表达式)

  • -a, --absolute-path:显示绝对路径而非相对路径

  • -l, --list-details:使用长列表格式,显示文件元数据

  • -L, --follow:追踪符号链接

  • -p, --full-path:匹配完整绝对路径(默认:仅匹配文件名)

  • -d, --max-depth :设置最大搜索深度(默认:无限制)

  • -E, --exclude :排除匹配给定通配符模式的条目

  • -t, --type :按类型过滤:文件 (f)、目录 (d)、符号链接 (l)、可执行文件 (x) 等

  • -e, --extension :按文件扩展名过滤

  • -S, --size :根据文件大小限制结果

  • --changed-within:按文件修改时间过滤(比给定时间晚)

  • --changed-before:按文件修改时间过滤(比给定时间早)

  • -o, --owner:按所属用户和/或组过滤

  • --format :根据模板格式化打印结果

  • -x, --exec :为每个搜索结果执行一次命令

  • -X, --exec-batch :将所有搜索结果作为参数一次性执行命令

  • -c, --color :何时使用颜色(auto, always, never)

  • --hyperlink=:在输出路径中添加超链接

  • --ignore-contain :忽略包含指定名称条目的目录

  • -h, --help:打印帮助信息

  • -V, --version:打印版本号

基本搜索

直接传入关键词即可在当前目录下递归搜索(默认支持正则表达式)

shell 复制代码
$ fd login

指定搜索目录

shell 复制代码
$ fd login tests/

区分大小写搜索

shell 复制代码
$ fd -s Login

按文件类型、扩展名过滤

按扩展名搜索 (-e),寻找特定类型的文件(如 .md 文件)

shell 复制代码
$ fd -e py
或
$ fd -e .py

按类型搜索 (-t)

shell 复制代码
# 文件 (f)
$ fd -tf

# 目录 (d)
$ fd -td

# 符号链接 (l)
$ fd -tl

# 可执行文件 (x)
$ fd -tx

隐藏与忽略文件

fd默认会自动跳过隐藏文件/目录以及 .gitignore 中列出的条目,如果想取消这些限制,可以使用命令扩展

搜索隐藏文件 (-H)

shell 复制代码
$ fd -H login

不忽略 .gitignore 规则 (-I)

shell 复制代码
$ fd -I node_modules

搜索所有文件(解除所有限制 -u)相当于 -HI

shell 复制代码
$ fd -u target

条件过滤

按修改时间过滤

shell 复制代码
# 查找近1天内修改过
$ fd --changed-within 1d

# 查找近7天前修改的文件
$ fd --changed-before 7d

按文件大小过滤

shell 复制代码
# 查找大于100MB的文件
$ fd --size +100M

# 查找小于1KB的文件
$ fd --size -1k

按文件权限/所有者过滤

shell 复制代码
查找属于用户 username 的文件
$ fd --owner username

# 查找属于用户root的文件
$ fd -o root

设置最大搜索深度(-d)

shell 复制代码
$ fd -d 2 pattern

正则与匹配

查找以 test_开头并以 .py 结尾的文件

shell 复制代码
$ fd '^test_.*\.py$'

匹配多个扩展名

shell 复制代码
$ fd '\.(jpg|py)$'

Glob通配符匹配

shell 复制代码
$ fd -g 'test_*.py'

输出与格式化

自定义打印格式 (--format)

powershell 复制代码
$ fd -e md --format 'Found Markdown file: {}'

显示文件元数据长列表 (-l)

shell 复制代码
$ fd -e py -l

显示绝对路径 (-a)

shell 复制代码
$ fd -a test_login_page.py

命令执行

并行单条执行 (-x/--exec)

shell 复制代码
# 将每个匹配到的 .png 图片压缩转换为 .webp
$ fd -e png -x cwebp {} -o {.}.webp

批量一次性执行 (-X / --exec-batch)

shell 复制代码
# 将搜到的所有 .txt 文件作为参数一次性传给 grep 搜索文本
$ fd -e txt -X grep 'TODO'

一次性统计所有 .py 代码文件的行数

shell 复制代码
$ fd -e rs -X wc -l

与其他工具配合

以树状图结构展示(结合 tree 命令)

powershell 复制代码
$ fd --extension md | tree --fromfile

对fd匹配的文件进行检索

shell 复制代码
$ fd -e py | grep 'login'

友情提示

见原文:终端文件查找工具:fd

本文同步自微信公众号 "程序员小溪" ,这里只是同步,想看及时消息请移步我的公众号,不定时更新我的学习经验。友情提示友情提示

相关推荐
Flynt17 小时前
HN 382分热文里的终端小技巧,我实测了一遍,git pickaxe 最值
git·命令行
databook3 天前
如何使用 Bash 进行数据清洗
数据分析·命令行
阿钱真强道8 天前
03 嵌入式操作系统 | 常用命令Ⅰ:文件、查找与压缩
linux·ubuntu·文件管理·命令行·压缩解压
zzzzzz31011 天前
Claude Code:把 AI 放进终端,真正值得关注的是什么
人工智能·开源·命令行
捷瑞电子工坊14 天前
Ubuntu 终端指令速查手册(持续更新)
linux·ubuntu·教程·开发工具·命令行·速查手册·终端指令
Lyra_Infra22 天前
MySQL Docker 误删恢复:binlog PITR
mysql·docker·命令行
hello93071 个月前
homebrew常用操作
命令行
Ratman1 个月前
影刀RPA卸载残留篡改环境变量的排查
命令行
深海鱼在掘金1 个月前
深入浅出RAG——第7章:基础篇实战:文档问答机器人
人工智能·typescript·命令行
Patrick_Wilson1 个月前
你知道 git check 的故事吗
git·程序员·命令行