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 )
2
8
3
9
![ ] ( ./images/1.jpeg )
4
10
5
- 这是 HelloGitHub 推出的 [ 《讲解开源项目》 ] ( https://github.com/HelloGitHub-Team/Article ) 系列,今天给大家推荐一个Rust 开源的文件搜索工具 —— [ fd ] ( https://github.com/sharkdp/fd )
11
+ 该工具支持大多数主流操作系统,快来更新你的工具箱感受开源项目带来的便利吧!
6
12
7
13
## 一、fd 简介
8
14
14
20
15
21
我这里先放一个图,让大家直观的感受下
16
22
17
- ![ ] ( ./images/2.svg )
23
+ ![ ] ( ./images/2.gif )
18
24
19
- fd 是一个命令行工具,提供了多种方便的选项进行文件的搜索,而且默认是彩色输出。项目本身是由 Rust 语言编写的,作为系统级编程语言 Rust 拥有媲美 C++ 的运行速度,那 fd 的速度自然也不在话下,更优秀的是,他提供了强大功能方便用户按照各种条件进行搜索。
20
-
21
- 这个优秀的项目是不是成功的引起了你的注意呢~
25
+ fd 是一个命令行工具,提供了多种方便的选项进行文件的搜索,而且默认是彩色输出。项目本身是由 Rust 语言编写的,作为系统级编程语言 Rust 拥有媲美 C++ 的运行速度,那 fd 的速度自然也不在话下,更优秀的是,它提供了强大功能方便用户按照各种条件进行搜索。
22
26
23
27
![ ] ( ./images/3.png )
24
28
29
+ 这个优秀的项目是不是成功的引起了你的注意呢~
30
+
25
31
## 二、fd 如何安装
26
32
27
33
作为使用的第一步当然是要先安装啦~
@@ -64,16 +70,38 @@ USAGE:
64
70
fd [FLAGS/OPTIONS] [<pattern>] [<path>...]
65
71
66
72
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>... 根据文件大小限制结果。
69
97
...
70
98
```
71
99
72
100
## 三、fd 快速上手演示
73
101
74
102
为了能让之后的演示有一个统一的认识,我这里新建了一个目录作为 fd 的测试目录,我虚构了一些文件和目录来模拟实际情况,包括一个隐藏目录,我之后的演示都会基于该根目录下,选项如果有短名称和长名称,示例中以短名称为例。
75
103
76
- 该目录大致是这样
104
+ 该目录大致是这样:
77
105
78
106
```
79
107
.
@@ -137,7 +165,7 @@ java/Hello.java
137
165
138
166
默认 ` fd ` 是匹配智能大小写的,如果你搜索的内容的是包含大写会按照大小写精确匹配,但如果是小写会忽略大小写匹配,所以 ` fd ` 另外提供了两种选项来严格控制大小写匹配
139
167
140
- 选项 ` -i ` 或 ` --ignore-case ` , 忽略大小写
168
+ 选项 ` -i ` 或 ` --ignore-case ` 忽略大小写。
141
169
142
170
```
143
171
$ fd -i Hello
@@ -147,7 +175,7 @@ hello_java.md
147
175
java/Hello.java
148
176
```
149
177
150
- 选项 ` -s ` 或 ` --case-sensitive ` , 严格匹配大小写
178
+ 选项 ` -s ` 或 ` --case-sensitive ` 严格匹配大小写。
151
179
152
180
```
153
181
$ fd -s hello
@@ -157,7 +185,7 @@ hello_java.md
157
185
158
186
### 3.4 返回绝对路径
159
187
160
- 选项 ` -a ` 或 ` --absolute-path `
188
+ 选项 ` -a ` 或 ` --absolute-path ` :
161
189
162
190
```
163
191
$ fd -a Hello
@@ -167,7 +195,7 @@ $ fd -a Hello
167
195
168
196
### 3.5 返回文件列表详情
169
197
170
- 选项 ` -l ` 或 ` --list-details ` , 获得类似 ` ls -l ` 的效果
198
+ 选项 ` -l ` 或 ` --list-details ` 获得类似 ` ls -l ` 的效果。
171
199
172
200
```
173
201
$ fd -l hello
@@ -179,9 +207,9 @@ $ fd -l hello
179
207
180
208
### 3.6 搜索内容包含路径
181
209
182
- 选项 ` -p ` 或 ` --full-path ` , 不单单搜索文件名,还列出目录中包含目标内容的结果
210
+ 选项 ` -p ` 或 ` --full-path ` 不单单搜索文件名,还列出目录中包含目标内容的结果。
183
211
184
- 因为这个测试的目录就在 ` /Users/junjiexun ` 下面,所以这样搜索相当于全部的文件都会被搜索出来
212
+ 因为这个测试的目录就在 ` /Users/junjiexun ` 下面,所以这样搜索相当于全部的文件都会被搜索出来。
185
213
186
214
```
187
215
$ fd xun
@@ -196,9 +224,9 @@ dir1/dir2
196
224
197
225
### 3.7 包括 .gitignore 里的文件
198
226
199
- 选项 ` -I ` 或 ` --no-ignore ` , 我这里新建了一个 ` .gitignore ` 文件内容只有一个 ` *.java ` 用来演示,并且需要把当前目录通过 ` git init ` 初始化成 git 的项目
227
+ 选项 ` -I ` 或 ` --no-ignore ` 我这里新建了一个 ` .gitignore ` 文件内容只有一个 ` *.java ` 用来演示,并且需要把当前目录通过 ` git init ` 初始化成 git 的项目。
200
228
201
- 不加该参数,可以看到结果集中 ` .java ` 的文件都被过滤了
229
+ 不加该参数,可以看到结果集中 ` .java ` 的文件都被过滤了。
202
230
203
231
```
204
232
$ fd java
207
235
my_java.txt
208
236
```
209
237
210
- 加上了 ` -I ` 之后结果中又包括了 ` .java ` 结尾的文件了
238
+ 加上了 ` -I ` 之后结果中又包括了 ` .java ` 结尾的文件了。
211
239
212
240
```
213
241
$ fd -I java
@@ -222,15 +250,15 @@ my_java.txt
222
250
223
251
` -I ` 功能我演示完了,为了之后的演示,我将 ` .gitignore ` 和 ` .git ` 目录给删除了。
224
252
225
- 这些简单的功能已经可以满足一半的日常搜索需求了,接下来我们看看 ` fd ` 提供的更高级的搜索选项吧
253
+ 这些简单的功能已经可以满足一半的日常搜索需求了,接下来我们看看 ` fd ` 提供的更高级的搜索选项吧!
226
254
227
- ![ ] ( ./images/4.gif )
255
+ ![ ] ( ./images/4.jpeg )
228
256
229
257
## 四、高级搜索选项
230
258
231
259
### 4.1 按深度
232
260
233
- 选项 ` -d ` 或 ` --max-depth <depth> ` ,当前路径算深度 1,` dir3 ` 下面的 ` rs ` 文件就是深度 4 了
261
+ 选项 ` -d ` 或 ` --max-depth <depth> ` ,当前路径算深度 1,` dir3 ` 下面的 ` rs ` 文件就是深度 4 了。
234
262
235
263
``` rust
236
264
$ fd rs
@@ -248,11 +276,11 @@ rust/fd_help.rs
248
276
249
277
### 4.2 按文件类型
250
278
251
- 选项 ` -t ` 或 ` --type <filetype> ` ,` fd ` 提供了以下几种 ` filetype ` 选项
279
+ 选项 ` -t ` 或 ` --type <filetype> ` ,` fd ` 提供了以下几种 ` filetype ` 选项:
252
280
253
- - f:file
254
- - d:directory
255
- - l:symlink
281
+ - f:file
282
+ - d:directory
283
+ - l:symlink
256
284
- x:executable
257
285
- e:empty
258
286
- s:socket
@@ -295,9 +323,7 @@ hello_java.md
295
323
296
324
### 4.4 排除
297
325
298
- 选项 ` -E ` 或 ` --exclude <pattern> ` ,支持通配符
299
-
300
- 排除所有包含字母 ` s ` 的结果
326
+ 选项 ` -E ` 或 ` --exclude <pattern> ` 支持通配符,排除所有包含字母 ` s ` 的结果。
301
327
302
328
```
303
329
$ fd -E '*s*'
@@ -319,7 +345,7 @@ python/demo.py
319
345
python/demo1.py
320
346
```
321
347
322
- 可以看到所有的 rust、rs、sss、soft 都没有出现在结果集中
348
+ 可以看到所有的 rust、rs、sss、soft 都没有出现在结果集中。
323
349
324
350
### 4.5 按所有者
325
351
@@ -357,9 +383,7 @@ $ fd py -X vim
357
383
358
384
### 4.7 正则表达式
359
385
360
- 对于文件的内容搜索,我之前演示的是诸如 Hello、java、py 都是这样的完整文本,实际 ` fd ` 默认就是支持正则表达式对内容进行搜索的,但是正则表达式需要使用单引号 ` ' ` 包裹起来,我下面演示下
361
-
362
- 所有 s 开头的文件都能被搜索出来
386
+ 对于文件的内容搜索,我之前演示的是诸如 Hello、java、py 都是这样的完整文本,实际 ` fd ` 默认就是支持正则表达式对内容进行搜索的,但是正则表达式需要使用单引号 ` ' ` 包裹起来,我下面演示:将所有 s 开头的文件都能被搜索出来。
363
387
364
388
```
365
389
$ fd '^s.*'
@@ -369,9 +393,7 @@ softdir3
369
393
sss.py
370
394
```
371
395
372
- 如果你不想使用正则表达式,想换成更简单的通配符匹配的话就可以使用选项 ` -g ` 或 ` --glob `
373
-
374
- 可以达到同样的效果
396
+ 如果你不想使用正则表达式,想换成更简单的通配符匹配的话就可以使用选项 ` -g ` 或 ` --glob ` 可以达到同样的效果。
375
397
376
398
```
377
399
$ fd -g 's*'
@@ -381,14 +403,12 @@ softdir3
381
403
sss.py
382
404
```
383
405
384
- 上面的选项大部分都是可以同时使用的,我这里就不继续演示了,就当留个作业给大家吧~
385
-
386
- ![ ] ( ./images/5.jpeg )
406
+ 上面的选项大部分都是可以同时使用的,篇幅有限我这里就不继续演示了。
387
407
388
408
## 五、总结
389
409
390
- ` fd ` 是一个简单友好的命令行文件搜索工具,而且其开源的属性作为 Rust 源码学习的对象也是非常优秀的,给这个项目点个 star 吧,赶快行动起来吧~
410
+ ` fd ` 是一个简单友好的命令行文件搜索工具,而且其开源的属性作为 Rust 源码学习的对象也是非常优秀的,赶紧学起来吧!
391
411
392
- 顺便文章转评赞走一波,祝所有点赞的人,身体健康,大富大贵!
412
+ > 《讲解开源项目》: https://github.com/HelloGitHub-Team/Article
393
413
394
- ![ ] ( ./images/6.png )
414
+ 如果你也对开源项目感兴趣,希望自己的文章或项目被更多人喜欢, [ 点击加入 ] ( https://hellogithub.yuque.com/docs/share/92166c1f-2208-414d-a92e-b873ae03c12f ) 《讲解开源项目》让我们一起分享有趣、入门级的开源项目吧!
0 commit comments