Linux fd命令

参考资料

  1. fd コマンド

目录

  • [一. 简介](#一. 简介)
  • [二. 安装](#二. 安装)
  • [三. 配置项](#三. 配置项)
    • [3.1 默认使用正则表达式搜索](#3.1 默认使用正则表达式搜索)
    • [3.2 `-t` ⇔ `--type`](#3.2 -t--type)
    • [3.3 `-e` ⇔ `--extension`](#3.3 -e--extension)
    • [3.4 `-E` ⇔ `--exclude`](#3.4 -E--exclude)
    • [3.5 `-d` ⇔ `--max-depth`](#3.5 -d--max-depth)
    • [3.6 `-a` ⇔ `--absolute-path`](#3.6 -a--absolute-path)
    • [3.7 `-x` ⇔ `--exec`](#3.7 -x--exec)
    • [3.8 `-S` ⇔ `--size`](#3.8 -S--size)
    • [3.9 `--changed-before`](#3.9 --changed-before)
    • [3.10 `--changed-within`](#3.10 --changed-within)
    • [3.11 `--format`](#3.11 --format)

一. 简介

fd 是一个现代化的文件查找工具,可以看作是 Linux 传统 find 命令的增强版。

  • 语法简单
  • 搜索速度快
  • 默认忽略 .gitignore
  • 支持正则表达式
  • 递归搜索目录

🔷基本语法

bash 复制代码
fd [选项] <pattern> [path]

二. 安装

🔷Ubuntu系统

bash 复制代码
sudo apt-get install fd-find
  • 安装完成之后,命令的名称为fdfind
bash 复制代码
apluser@FengYeHong-HP:~$ which fdfind
/usr/bin/fdfind
apluser@FengYeHong-HP:~$
  • 如果想要简洁使用的话,可配置为fd
bash 复制代码
# 方式一
sudo ln -s $(which fdfind) /usr/local/bin/fd

# 方式二
nano ~/.bashrc
alias fd='fdfind'
source ~/.bashrc

三. 配置项

3.1 默认使用正则表达式搜索

  • 查询文件名中至少有3个数字的文件
bash 复制代码
apluser@FengYeHong-HP:project$ fd '\d{3,}' .
./helloworld-django/hello/__pycache__/__init__.cpython-311.pyc
./helloworld-django/hello/__pycache__/urls.cpython-311.pyc
./helloworld-django/hello/__pycache__/views.cpython-311.pyc
./helloworld-django/web_project/__pycache__/__init__.cpython-311.pyc
./helloworld-django/web_project/__pycache__/settings.cpython-311.pyc
./helloworld-django/web_project/__pycache__/urls.cpython-311.pyc
./helloworld-django/web_project/__pycache__/wsgi.cpython-311.pyc
bash 复制代码
apluser@FengYeHong-HP:project$ fd '[0-9]{3,}' .
./helloworld-django/hello/__pycache__/__init__.cpython-311.pyc
./helloworld-django/hello/__pycache__/urls.cpython-311.pyc
./helloworld-django/hello/__pycache__/views.cpython-311.pyc
./helloworld-django/web_project/__pycache__/__init__.cpython-311.pyc
./helloworld-django/web_project/__pycache__/settings.cpython-311.pyc
./helloworld-django/web_project/__pycache__/urls.cpython-311.pyc
./helloworld-django/web_project/__pycache__/wsgi.cpython-311.pyc
  • 查询以urls开头的文件,当使用^urls之后,myurls.txt则变为对象外
bash 复制代码
apluser@FengYeHong-HP:project$ fd 'urls' . | tail -n 2
./helloworld-django/web_project/urls.py
./myurls.txt
apluser@FengYeHong-HP:project$
apluser@FengYeHong-HP:project$ fd '^urls' . | tail -n 2
./helloworld-django/web_project/__pycache__/urls.cpython-38.pyc
./helloworld-django/web_project/urls.py

3.2 -t--type

🔷按照文件的种类进行查询

bash 复制代码
PS E:\My_Project> fd -a --type d 'java'
E:\My_Project\Good_Article\03-Java\
PS E:\My_Project>
bash 复制代码
PS E:\My_Project> fd -a --type f 'java'
E:\My_Project\BashStudy\99-技巧\00-source\JavaSource.java
E:\My_Project\BashStudy\99-技巧\04-调用python和java代码.sh
E:\My_Project\Good_Article\03-Java\01-建议收藏,Java 命名规范(非常全).html
E:\My_Project\Good_Article\04-JS\07-JavaScript 中更现代的深拷贝方法.html
E:\My_Project\Good_Article\04-JS\08-JavaScript日期时间操作完整指南.html
E:\My_Project\Good_Article\04-JS\15-JavaScript 供应链为什么如此脆弱.html
E:\My_Project\Good_Article\04-JS\16-掌握 JavaScript 中的迭代器和生成器.html
E:\My_Project\Good_Article\04-JS\20-最失败的 JavaScript 面试问题.html
E:\My_Project\Good_Article\04-JS\21-JavaScript 新增7个Set方法,很实用.html
E:\My_Project\Good_Article\04-JS\25-JavaScriptで文字数を数えるのはそんなに簡単ではない.html
E:\My_Project\Good_Article\05-正则表达式\电子书\JavaScript正则表达式迷你书(1.1版).pdf
E:\My_Project\WebStudy\01-JS高级\day01-关键概念\01-this\01-JavaScript 中的 this 关键字.html
E:\My_Project\WebStudy\02-WebAPI\day04-API\02-iframe\03\04-java.html
E:\My_Project\test.java
PS E:\My_Project>

3.3 -e--extension

🔷按照文件的后缀名进行查询

bash 复制代码
apluser@FengYeHong-HP:project$ fd -e js -e html | head -n 5
./WebCurl/index.html
./WebCurl/tool.html
./koa-demos/demos/01.js
./koa-demos/demos/02.js
./koa-demos/demos/03.js
apluser@FengYeHong-HP:project$

3.4 -E--exclude

🔷用于排除指定的文件或者目录

bash 复制代码
PS E:\cbc> fd -e yml
src\main\resources\application-dev.yml
src\main\resources\application-product.yml
src\main\resources\application-test.yml
src\main\resources\application.yml
target\classes\application-dev.yml
target\classes\application-product.yml
target\classes\application-test.yml
target\classes\application.yml
PS E:\cbc>
PS E:\cbc> fd -e yml -E target
src\main\resources\application-dev.yml
src\main\resources\application-product.yml
src\main\resources\application-test.yml
src\main\resources\application.yml
  • 支持同时排除3多个文件夹
bash 复制代码
apluser@FengYeHong-HP:~$ fd -a -e java -E target -E .git -E node_modules -x ls -l
-rw-r--r-- 1 apluser apluser 1148 Dec 29 15:46 /home/apluser/DecimalFormatUtil.java

3.5 -d--max-depth

🔷指定检索的深度

bash 复制代码
PS E:\My_Project> fd -a --type f 'java' | wc -l
14
PS E:\My_Project> fd -a --type f --max-depth 1 'java' | wc -l
1
PS E:\My_Project>
PS E:\My_Project> fd -a --type f --max-depth 1 'java'
E:\My_Project\test.java
PS E:\My_Project>

3.6 -a--absolute-path

🔷显示绝对路径

bash 复制代码
apluser@FengYeHong-HP:project$ fd -a '^urls' .
/home/apluser/project/helloworld-django/hello/__pycache__/urls.cpython-311.pyc
/home/apluser/project/helloworld-django/hello/__pycache__/urls.cpython-36.pyc
/home/apluser/project/helloworld-django/hello/__pycache__/urls.cpython-38.pyc
/home/apluser/project/helloworld-django/hello/urls.py
/home/apluser/project/helloworld-django/web_project/__pycache__/urls.cpython-311.pyc
/home/apluser/project/helloworld-django/web_project/__pycache__/urls.cpython-36.pyc
/home/apluser/project/helloworld-django/web_project/__pycache__/urls.cpython-38.pyc
/home/apluser/project/helloworld-django/web_project/urls.py

3.7 -x--exec

🔷对检索结果执行指定的命令

bash 复制代码
apluser@FengYeHong-HP:project$ fd -a -e js -e html -x grep -H 'demo'
/home/apluser/project/koa-demos/demos/04.js:  ctx.response.body = fs.createReadStream('./demos/template.html');
/home/apluser/project/koa-demos/demos/10.js:  ctx.response.body = await fs.readFile('./demos/template.html', 'utf8');
bash 复制代码
apluser@FengYeHong-HP:project$ fd -a -e js -e html -x ls -l | head
-rw-r--r-- 1 apluser apluser 563 Jun  7  2025 /home/apluser/project/koa-demos/demos/03.js
-rw-r--r-- 1 apluser apluser 677 Jun  7  2025 /home/apluser/project/koa-demos/demos/21.js
-rw-r--r-- 1 apluser apluser 195 Jun  7  2025 /home/apluser/project/koa-demos/demos/12.js
-rw-r--r-- 1 apluser apluser 193371 Jul 21  2025 /home/apluser/project/WebCurl/index.html
-rw-r--r-- 1 apluser apluser 129 Jun  7  2025 /home/apluser/project/koa-demos/demos/14.js
-rw-r--r-- 1 apluser apluser 180 Jun  7  2025 /home/apluser/project/koa-demos/demos/15.js
-rw-r--r-- 1 apluser apluser 20782 Jul 21  2025 /home/apluser/project/WebCurl/tool.html
-rw-r--r-- 1 apluser apluser 285 Jun  7  2025 /home/apluser/project/koa-demos/demos/05.js
-rw-r--r-- 1 apluser apluser 148 Jun  7  2025 /home/apluser/project/koa-demos/demos/02.js
-rw-r--r-- 1 apluser apluser 347 Jun  7  2025 /home/apluser/project/koa-demos/demos/06.js

3.8 -S--size

🔷按照文件大小进行搜索,+ 表示大于,-表示小于,常用到的单位:

  • b → 字节
  • k → KB
  • m → MB
  • g → GB
  • t → TB
bash 复制代码
PS F:\01-音乐> fd -a -S +60m .
F:\01-音乐\EGOIST - 咲かせや咲かせ.FLAC
F:\01-音乐\Eliana - Symphonicsuite (Aot) Part2-1st Attack on Titan (Wmid).flac
F:\01-音乐\Lisa - ADAMAS.FLAC
F:\01-音乐\Suara - 懐かしいこの場所で.flac
F:\01-音乐\大橋彩香 - Please, please!.flac

3.9 --changed-before

🔷检索指定时间之前的文件

bash 复制代码
PS F:\01-音乐> fd -a --changed-before 2year -e mp3
F:\01-音乐\2015 Love Songs Wiz Khalifa Charlie Puth - See You Again.mp3
F:\01-音乐\5050 - Jungle P.MP3
F:\01-音乐\7!! - ラヴァーズ.mp3
F:\01-音乐\96猫 - 嘘の火花.MP3
bash 复制代码
PS F:\01-音乐> ls -l 'F:\01-音乐\96猫 - 嘘の火花.MP3'

    Directory: F:\01-音乐

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           2024/2/25    20:32        5437954 96猫 - 嘘の火花.MP3

PS F:\01-音乐> fd -a --changed-before '2024-02-28' -e mp3
F:\01-音乐\96猫 - 嘘の火花.MP3
F:\01-音乐\AniFace - 夜、萤火虫和你.mp3
F:\01-音乐\CMJ - 所念皆星河.mp3
F:\01-音乐\CMJ - 萤火之森.mp3

PS F:\01-音乐> fd -a --changed-before '2024-02-28 21:00:00' -e mp3
F:\01-音乐\96猫 - 嘘の火花.MP3
F:\01-音乐\AniFace - 夜、萤火虫和你.mp3
F:\01-音乐\CMJ - 所念皆星河.mp3
F:\01-音乐\CMJ - 萤火之森.mp3

3.10 --changed-within

🔷检索指定时间之后的文件

bash 复制代码
PS F:\01-音乐> ls -l 'F:\01-音乐\Himeka - PRECIOUS.mp3'

    Directory: F:\01-音乐

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           2026/5/21    16:40       10369922 Himeka - PRECIOUS.mp3

PS F:\01-音乐>
PS F:\01-音乐> fd -a --changed-within 3weeks -e mp3
F:\01-音乐\Bôa - Duvet.mp3
F:\01-音乐\Himeka - PRECIOUS.mp3
F:\01-音乐\LiSA - シルシ.mp3
F:\01-音乐\池澤春菜, 山本麻里安, 小林沙苗, 白石涼子, 村田あゆみ, 井ノ上奈々 - ロマンシングストーリー.mp3
F:\01-音乐\種ともこ - Let me hear.mp3
F:\01-音乐\苏苏不会rap - 遗失的心跳 (remix版).mp3
  • 2026-04-01(含)到 2026-04-10(不含)之间发生过修改的所有 mp3 文件,并显示绝对路径。
bash 复制代码
PS F:\01-音乐> fd -a --changed-within '2026-04-01' --changed-before '2026-04-10' -e mp3
F:\01-音乐\GARNET CROW - この手を伸ばせば.mp3
F:\01-音乐\Rie fu - Life Is Like A Boat.mp3
F:\01-音乐\Shela - 月と太陽.mp3
F:\01-音乐\miwa - chAngE.mp3
F:\01-音乐\めらみぽっぷ - 童遊.mp3
F:\01-音乐\元ちとせ - 語り継ぐこと.mp3
F:\01-音乐\八重川Yaekawa - 雨愛Akashi.mp3
F:\01-音乐\小松未歩 - I just wanna hold you tight.MP3
F:\01-音乐\山崎まさよし - One more time, One more chance.mp3
F:\01-音乐\杨丞琳 - 雨爱.mp3
F:\01-音乐\竹井詩織里 - 桜色.mp3
F:\01-音乐\胡夏 - 那些年.MP3

3.11 --format

  • {} :整个路径
  • {/}:只要最后一个 /
  • {//}:去掉最后一个 /
  • {.}:去掉扩展名
  • {/.}:只要文件名并去扩展名
bash 复制代码
PS E:\My_Project> fd -a -e yaml
E:\My_Project\FlutterStudy\dart_study\analysis_options.yaml
E:\My_Project\FlutterStudy\dart_study\pubspec.yaml
  • 保留路径,去掉扩展名
bash 复制代码
PS E:\My_Project> fd -a -e yaml --format '{.}'
E:\My_Project\FlutterStudy\dart_study\analysis_options
E:\My_Project\FlutterStudy\dart_study\pubspec
  • 不保留路径,去掉扩展名,保留文件名,并修改扩展名
bash 复制代码
PS E:\My_Project> fd -a -e yaml --format '{/.}'
analysis_options
pubspec
PS E:\My_Project>
PS E:\My_Project> fd -a -e yaml --format '{/.}.text'
analysis_options.text
pubspec.text
PS E:\My_Project>
  • 去掉最后一个 /
bash 复制代码
PS E:\My_Project> fd -a -e yaml --format '{//}'
E:\My_Project\FlutterStudy\dart_study
E:\My_Project\FlutterStudy\dart_study
相关推荐
AIMath~1 小时前
hermes agent安装在Linux centos中
linux·运维·服务器
赵民勇1 小时前
如何查看一个二进制程序是否设置了rpath或runpath?
linux·c++
小王师傅661 小时前
深入解析:Docker在Mac上的运行本质与Linux进程管理机制
linux·macos·docker
Irissgwe1 小时前
9、数据链路层
linux·网络·mac·ip·数据链路层·arp协议·以太网帧格式
lwprain1 小时前
Umi-ocr2.1.5的linux部署,仅做记录
linux·服务器·umi-ocr
鹏大师运维2 小时前
统信UOS安装Subtitle Edit并使用Edge-TTS生成AI语音教程
linux·前端·人工智能·edge·麒麟·统信uos·ai语音
syagain_zsx2 小时前
Linux进程全面解析:从基础到高级管理(1/3)
linux
实心儿儿2 小时前
Linux —— 线程池(1)
linux
卧室小白2 小时前
K8S-Pod基本配置
linux·运维·服务器