参考资料
目录
- [一. 简介](#一. 简介)
- [二. 安装](#二. 安装)
- [三. 配置项](#三. 配置项)
-
- [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