Skip to content

Commit f941ef3

Browse files
committed
publish fd
1 parent cfb65e3 commit f941ef3

File tree

10 files changed

+61
-42
lines changed

10 files changed

+61
-42
lines changed

contents/Rust/fd/content.md

Lines changed: 61 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1-
# 开源文件搜索神器 —— fd
1+
# 开源的文件搜索神器,终于不用再记 find 命令了
2+
3+
![](images/cover.jpeg)
4+
5+
这是 HelloGitHub 推出的[《讲解开源项目》](https://github.com/HelloGitHub-Team/Article)系列,用一篇文章带你快速上手有趣的开源项目。
6+
7+
今天给大家推荐一个简单、开源的文件搜索工具——[fd](https://github.com/sharkdp/fd)
28

39
![](./images/1.jpeg)
410

5-
这是 HelloGitHub 推出的[《讲解开源项目》](https://github.com/HelloGitHub-Team/Article)系列,今天给大家推荐一个Rust 开源的文件搜索工具 —— [fd](https://github.com/sharkdp/fd)
11+
该工具支持大多数主流操作系统,快来更新你的工具箱感受开源项目带来的便利吧!
612

713
## 一、fd 简介
814

@@ -14,14 +20,14 @@
1420
1521
我这里先放一个图,让大家直观的感受下
1622

17-
![](./images/2.svg)
23+
![](./images/2.gif)
1824

19-
fd 是一个命令行工具,提供了多种方便的选项进行文件的搜索,而且默认是彩色输出。项目本身是由 Rust 语言编写的,作为系统级编程语言 Rust 拥有媲美 C++ 的运行速度,那 fd 的速度自然也不在话下,更优秀的是,他提供了强大功能方便用户按照各种条件进行搜索。
20-
21-
这个优秀的项目是不是成功的引起了你的注意呢~
25+
fd 是一个命令行工具,提供了多种方便的选项进行文件的搜索,而且默认是彩色输出。项目本身是由 Rust 语言编写的,作为系统级编程语言 Rust 拥有媲美 C++ 的运行速度,那 fd 的速度自然也不在话下,更优秀的是,它提供了强大功能方便用户按照各种条件进行搜索。
2226

2327
![](./images/3.png)
2428

29+
这个优秀的项目是不是成功的引起了你的注意呢~
30+
2531
## 二、fd 如何安装
2632

2733
作为使用的第一步当然是要先安装啦~
@@ -64,16 +70,38 @@ USAGE:
6470
fd [FLAGS/OPTIONS] [<pattern>] [<path>...]
6571
6672
FLAGS:
67-
-H, --hidden Search hidden files and directories
68-
-I, --no-ignore Do not respect .(git|fd)ignore files
73+
-H, --hidden 搜索隐藏的文件和目录
74+
-I, --no-ignore 不要忽略 .(git | fd)ignore 文件匹配
75+
--no-ignore-vcs 不要忽略.gitignore文件的匹配
76+
-s, --case-sensitive 区分大小写的搜索(默认值:智能案例)
77+
-i, --ignore-case 不区分大小写的搜索(默认值:智能案例)
78+
-F, --fixed-strings 将模式视为文字字符串
79+
-a, --absolute-path 显示绝对路径而不是相对路径
80+
-L, --follow 遵循符号链接
81+
-p, --full-path 搜索完整路径(默认值:仅限 file-/dirname)
82+
-0, --print0 用null字符分隔结果
83+
-h, --help 打印帮助信息
84+
-V, --version 打印版本信息
85+
86+
OPTIONS:
87+
-d, --max-depth <depth> 设置最大搜索深度(默认值:无)
88+
-t, --type <filetype>... 按类型过滤:文件(f),目录(d),符号链接(l),
89+
可执行(x),空(e)
90+
-e, --extension <ext>... 按文件扩展名过滤
91+
-x, --exec <cmd> 为每个搜索结果执行命令
92+
-E, --exclude <pattern>... 排除与给定glob模式匹配的条目
93+
--ignore-file <path>... 以.gitignore格式添加自定义忽略文件
94+
-c, --color <when> 何时使用颜色:never,*auto*, always
95+
-j, --threads <num> 设置用于搜索和执行的线程数
96+
-S, --size <size>... 根据文件大小限制结果。
6997
...
7098
```
7199

72100
## 三、fd 快速上手演示
73101

74102
为了能让之后的演示有一个统一的认识,我这里新建了一个目录作为 fd 的测试目录,我虚构了一些文件和目录来模拟实际情况,包括一个隐藏目录,我之后的演示都会基于该根目录下,选项如果有短名称和长名称,示例中以短名称为例。
75103

76-
该目录大致是这样
104+
该目录大致是这样
77105

78106
```
79107
.
@@ -137,7 +165,7 @@ java/Hello.java
137165

138166
默认 `fd` 是匹配智能大小写的,如果你搜索的内容的是包含大写会按照大小写精确匹配,但如果是小写会忽略大小写匹配,所以 `fd` 另外提供了两种选项来严格控制大小写匹配
139167

140-
选项 `-i`` --ignore-case`忽略大小写
168+
选项 `-i`` --ignore-case` 忽略大小写
141169

142170
```
143171
$ fd -i Hello
@@ -147,7 +175,7 @@ hello_java.md
147175
java/Hello.java
148176
```
149177

150-
选项 `-s`` --case-sensitive`严格匹配大小写
178+
选项 `-s`` --case-sensitive` 严格匹配大小写
151179

152180
```
153181
$ fd -s hello
@@ -157,7 +185,7 @@ hello_java.md
157185

158186
### 3.4 返回绝对路径
159187

160-
选项 `-a`` --absolute-path`
188+
选项 `-a`` --absolute-path`
161189

162190
```
163191
$ fd -a Hello
@@ -167,7 +195,7 @@ $ fd -a Hello
167195

168196
### 3.5 返回文件列表详情
169197

170-
选项 `-l`` --list-details`获得类似 `ls -l` 的效果
198+
选项 `-l`` --list-details` 获得类似 `ls -l` 的效果
171199

172200
```
173201
$ fd -l hello
@@ -179,9 +207,9 @@ $ fd -l hello
179207

180208
### 3.6 搜索内容包含路径
181209

182-
选项 `-p`` --full-path`不单单搜索文件名,还列出目录中包含目标内容的结果
210+
选项 `-p`` --full-path` 不单单搜索文件名,还列出目录中包含目标内容的结果
183211

184-
因为这个测试的目录就在 `/Users/junjiexun` 下面,所以这样搜索相当于全部的文件都会被搜索出来
212+
因为这个测试的目录就在 `/Users/junjiexun` 下面,所以这样搜索相当于全部的文件都会被搜索出来
185213

186214
```
187215
$ fd xun
@@ -196,9 +224,9 @@ dir1/dir2
196224

197225
### 3.7 包括 .gitignore 里的文件
198226

199-
选项 `-I`` --no-ignore`我这里新建了一个 `.gitignore` 文件内容只有一个 `*.java` 用来演示,并且需要把当前目录通过 `git init` 初始化成 git 的项目
227+
选项 `-I`` --no-ignore` 我这里新建了一个 `.gitignore` 文件内容只有一个 `*.java` 用来演示,并且需要把当前目录通过 `git init` 初始化成 git 的项目
200228

201-
不加该参数,可以看到结果集中 `.java` 的文件都被过滤了
229+
不加该参数,可以看到结果集中 `.java` 的文件都被过滤了
202230

203231
```
204232
$ fd java
@@ -207,7 +235,7 @@ java
207235
my_java.txt
208236
```
209237

210-
加上了 `-I` 之后结果中又包括了 `.java` 结尾的文件了
238+
加上了 `-I` 之后结果中又包括了 `.java` 结尾的文件了
211239

212240
```
213241
$ fd -I java
@@ -222,15 +250,15 @@ my_java.txt
222250

223251
`-I` 功能我演示完了,为了之后的演示,我将 `.gitignore``.git` 目录给删除了。
224252

225-
这些简单的功能已经可以满足一半的日常搜索需求了,接下来我们看看 `fd` 提供的更高级的搜索选项吧
253+
这些简单的功能已经可以满足一半的日常搜索需求了,接下来我们看看 `fd` 提供的更高级的搜索选项吧
226254

227-
![](./images/4.gif)
255+
![](./images/4.jpeg)
228256

229257
## 四、高级搜索选项
230258

231259
### 4.1 按深度
232260

233-
选项 `-d`` --max-depth <depth>`,当前路径算深度 1,`dir3` 下面的 `rs` 文件就是深度 4 了
261+
选项 `-d`` --max-depth <depth>`,当前路径算深度 1,`dir3` 下面的 `rs` 文件就是深度 4 了
234262

235263
```rust
236264
$ fd rs
@@ -248,11 +276,11 @@ rust/fd_help.rs
248276

249277
### 4.2 按文件类型
250278

251-
选项 `-t`` --type <filetype>``fd` 提供了以下几种 `filetype` 选项
279+
选项 `-t`` --type <filetype>``fd` 提供了以下几种 `filetype` 选项
252280

253-
- f:file
254-
- d:directory
255-
- l:symlink
281+
- f:file
282+
- d:directory
283+
- l:symlink
256284
- x:executable
257285
- e:empty
258286
- s:socket
@@ -295,9 +323,7 @@ hello_java.md
295323

296324
### 4.4 排除
297325

298-
选项 `-E`` --exclude <pattern>`,支持通配符
299-
300-
排除所有包含字母 `s` 的结果
326+
选项 `-E`` --exclude <pattern>` 支持通配符,排除所有包含字母 `s` 的结果。
301327

302328
```
303329
$ fd -E '*s*'
@@ -319,7 +345,7 @@ python/demo.py
319345
python/demo1.py
320346
```
321347

322-
可以看到所有的 rust、rs、sss、soft 都没有出现在结果集中
348+
可以看到所有的 rust、rs、sss、soft 都没有出现在结果集中
323349

324350
### 4.5 按所有者
325351

@@ -357,9 +383,7 @@ $ fd py -X vim
357383

358384
### 4.7 正则表达式
359385

360-
对于文件的内容搜索,我之前演示的是诸如 Hello、java、py 都是这样的完整文本,实际 `fd` 默认就是支持正则表达式对内容进行搜索的,但是正则表达式需要使用单引号 `'` 包裹起来,我下面演示下
361-
362-
所有 s 开头的文件都能被搜索出来
386+
对于文件的内容搜索,我之前演示的是诸如 Hello、java、py 都是这样的完整文本,实际 `fd` 默认就是支持正则表达式对内容进行搜索的,但是正则表达式需要使用单引号 `'` 包裹起来,我下面演示:将所有 s 开头的文件都能被搜索出来。
363387

364388
```
365389
$ fd '^s.*'
@@ -369,9 +393,7 @@ softdir3
369393
sss.py
370394
```
371395

372-
如果你不想使用正则表达式,想换成更简单的通配符匹配的话就可以使用选项 `-g``--glob`
373-
374-
可以达到同样的效果
396+
如果你不想使用正则表达式,想换成更简单的通配符匹配的话就可以使用选项 `-g``--glob` 可以达到同样的效果。
375397

376398
```
377399
$ fd -g 's*'
@@ -381,14 +403,12 @@ softdir3
381403
sss.py
382404
```
383405

384-
上面的选项大部分都是可以同时使用的,我这里就不继续演示了,就当留个作业给大家吧~
385-
386-
![](./images/5.jpeg)
406+
上面的选项大部分都是可以同时使用的,篇幅有限我这里就不继续演示了。
387407

388408
## 五、总结
389409

390-
`fd` 是一个简单友好的命令行文件搜索工具,而且其开源的属性作为 Rust 源码学习的对象也是非常优秀的,给这个项目点个 star 吧,赶快行动起来吧~
410+
`fd` 是一个简单友好的命令行文件搜索工具,而且其开源的属性作为 Rust 源码学习的对象也是非常优秀的,赶紧学起来吧!
391411

392-
顺便文章转评赞走一波,祝所有点赞的人,身体健康,大富大贵!
412+
> 《讲解开源项目》:https://github.com/HelloGitHub-Team/Article
393413
394-
![](./images/6.png)
414+
如果你也对开源项目感兴趣,希望自己的文章或项目被更多人喜欢,[点击加入](https://hellogithub.yuque.com/docs/share/92166c1f-2208-414d-a92e-b873ae03c12f)《讲解开源项目》让我们一起分享有趣、入门级的开源项目吧!

contents/Rust/fd/images/1.jpeg

-330 KB
Binary file not shown.

contents/Rust/fd/images/1.png

229 KB
Loading

contents/Rust/fd/images/2.gif

675 KB
Loading

contents/Rust/fd/images/2.svg

Lines changed: 0 additions & 1 deletion
This file was deleted.

contents/Rust/fd/images/3.png

144 KB
Loading

contents/Rust/fd/images/4.gif

-555 KB
Binary file not shown.
File renamed without changes.

contents/Rust/fd/images/6.png

-4.92 KB
Binary file not shown.

contents/Rust/fd/images/cover.jpeg

584 KB
Loading

0 commit comments

Comments
 (0)