1
- # 开源文件搜索神器
1
+ # 开源文件搜索神器 —— fd
2
2
3
3
![ ] ( ./images/1.jpeg )
4
4
16
16
17
17
![ ] ( ./images/2.svg )
18
18
19
- fd 是一个命令行工具,提供了多种方便的选项进行文件的搜索。项目本身是由 Rust 语言编写的,作为系统级编程语言 Rust 拥有媲美 C++ 的运行速度,那 fd 的速度自然也不在话下,更优秀的是,他提供了强大功能方便用户按照各种条件进行搜索。
19
+ fd 是一个命令行工具,提供了多种方便的选项进行文件的搜索,而且默认是彩色输出 。项目本身是由 Rust 语言编写的,作为系统级编程语言 Rust 拥有媲美 C++ 的运行速度,那 fd 的速度自然也不在话下,更优秀的是,他提供了强大功能方便用户按照各种条件进行搜索。
20
20
21
21
这个优秀的项目是不是成功的引起了你的注意呢~
22
22
@@ -42,7 +42,7 @@ $ brew install fd
42
42
$ brew upgrade fd
43
43
```
44
44
45
- 具体各个平台的你可以看这里 [ 安装 ] ( https://github.com/chinanf-boy/fd-zh#%E5%AE%89%E8%A3%85 )
45
+ 具体到各个平台的详细安装方法,你可以看这里 [ 安装文档 ] ( https://github.com/chinanf-boy/fd-zh#%E5%AE%89%E8%A3%85 )
46
46
47
47
### 2.2 源码安装
48
48
@@ -54,7 +54,7 @@ $ cargo install --path .
54
54
55
55
### 2.3 查看帮助
56
56
57
- 无论哪种方式安装完成后,就可以直接使用了 ` -h ` 或 ` --help ` 获取帮助了,` --help ` 就不演示了,区别就是换成了详细的帮助说明
57
+ 无论哪种方式安装完成后,就可以直接使用了 ` -h ` 或 ` --help ` 获取帮助了,` --help ` 就不演示了,区别就是换成了详细的帮助说明,如果你以后忘记了某一个参数也记得使用 ` --help ` 来查看哦~
58
58
59
59
```
60
60
$ fd -h
71
71
72
72
## 三、fd 快速上手演示
73
73
74
- 为了能让之后的演示有一个统一的认识,我这里新建了一个目录作为 fd 的测试目录,我虚构了一些文件和目录来模拟实际情况,该目录大致是这样,包括一个隐藏目录,我之后的演示都会基于该根目录下,选项如果有短名称和长名称,示例中以短名称为例
74
+ 为了能让之后的演示有一个统一的认识,我这里新建了一个目录作为 fd 的测试目录,我虚构了一些文件和目录来模拟实际情况,包括一个隐藏目录,我之后的演示都会基于该根目录下,选项如果有短名称和长名称,示例中以短名称为例。
75
+
76
+ 该目录大致是这样
75
77
76
78
```
77
79
.
@@ -109,7 +111,7 @@ FLAGS:
109
111
110
112
### 3.1 简单搜索
111
113
112
- ` fd ` 直接跟想要搜索的内容,会递归搜索当前目录下的所有文件,列出文件名中包含目标内容的结果(结果当前目录的相对路径 )
114
+ ` fd ` 直接跟想要搜索的内容,会递归搜索当前目录下的所有文件,列出文件名中包含目标内容的结果(结果为当前目录的相对路径 )
113
115
114
116
```
115
117
$ fd Hello
@@ -133,7 +135,7 @@ java/Hello.java
133
135
134
136
### 3.3 大小写
135
137
136
- 默认 ` fd ` 是匹配智能大小写的,如果你指定的是大写会按照精确匹配,但如果你指定的是小写会忽略大小写匹配 ,所以 ` fd ` 提供了两种选项来严格控制大小写匹配
138
+ 默认 ` fd ` 是匹配智能大小写的,如果你搜索的内容的是包含大写会按照大小写精确匹配,但如果是小写会忽略大小写匹配 ,所以 ` fd ` 另外提供了两种选项来严格控制大小写匹配
137
139
138
140
选项 ` -i ` 或 ` --ignore-case ` ,忽略大小写
139
141
@@ -153,7 +155,7 @@ hello_fd.md
153
155
hello_java.md
154
156
```
155
157
156
- ### 3.4 返回完整绝对路径
158
+ ### 3.4 返回绝对路径
157
159
158
160
选项 ` -a ` 或 ` --absolute-path `
159
161
@@ -163,7 +165,7 @@ $ fd -a Hello
163
165
/Users/junjiexun/fd_test/java/Hello.java
164
166
```
165
167
166
- ### 3.5 返回详细文件列表
168
+ ### 3.5 返回文件列表详情
167
169
168
170
选项 ` -l ` 或 ` --list-details ` ,获得类似 ` ls -l ` 的效果
169
171
@@ -175,9 +177,11 @@ $ fd -l hello
175
177
-rw-r--r-- 1 junjiexun staff 0B 3 1 18:38 java/Hello.java
176
178
```
177
179
178
- ### 3.6 搜索内容包含全路径
180
+ ### 3.6 搜索内容包含路径
181
+
182
+ 选项 ` -p ` 或 ` --full-path ` ,不单单搜索文件名,还列出目录中包含目标内容的结果
179
183
180
- 选项 ` -p ` 或 ` --full-path `
184
+ 因为这个测试的目录就在 ` /Users/junjiexun ` 下面,所以这样搜索相当于全部的文件都会被搜索出来
181
185
182
186
```
183
187
$ fd xun
@@ -187,33 +191,15 @@ dir1
187
191
dir1/Hello.java
188
192
dir1/World.java
189
193
dir1/dir2
190
- dir1/dir2/demo.py
191
- dir1/dir2/demo1.py
192
- dir1/dir2/dir3
193
- dir1/dir2/dir3/fd_demo.rs
194
- dir1/dir2/dir3/fd_help.rs
195
- dir1/dir2/sss.py
196
- hello_fd.md
197
- hello_java.md
198
- java
199
- java/Hello.java
200
- java/World.java
201
- my_java.txt
202
- python
203
- python/demo.py
204
- python/demo1.py
205
- python/sss.py
206
- rust
207
- rust/fd_demo.rs
208
- rust/fd_help.rs
209
- softdir3
210
- sss.py
194
+ ...(略)
211
195
```
212
196
213
197
### 3.7 包括 .gitignore 里的文件
214
198
215
199
选项 ` -I ` 或 ` --no-ignore ` ,我这里新建了一个 ` .gitignore ` 文件内容只有一个 ` *.java ` 用来演示,并且需要把当前目录通过 ` git init ` 初始化成 git 的项目
216
200
201
+ 不加该参数,可以看到结果集中 ` .java ` 的文件都被过滤了
202
+
217
203
```
218
204
$ fd java
219
205
hello_java.md
@@ -234,9 +220,9 @@ java/World.java
234
220
my_java.txt
235
221
```
236
222
237
- ` -I ` 功能我演示完了,我就将 ` .gitignore ` 和 ` .git ` 目录给删除了。
223
+ ` -I ` 功能我演示完了,为了之后的演示,我将 ` .gitignore ` 和 ` .git ` 目录给删除了。
238
224
239
- 这些简单的功能已经可以一半的日常搜索需求了 ,接下来我们看看 ` fd ` 提供的更高级的搜索选项吧
225
+ 这些简单的功能已经可以满足一半的日常搜索需求了 ,接下来我们看看 ` fd ` 提供的更高级的搜索选项吧
240
226
241
227
![ ] ( ./images/4.gif )
242
228
@@ -262,7 +248,7 @@ rust/fd_help.rs
262
248
263
249
### 4.2 按文件类型
264
250
265
- 选项 ` -t ` 或 ` --type <filetype> ` ,一共有以下几种 ` filetype ` 选项
251
+ 选项 ` -t ` 或 ` --type <filetype> ` ,` fd ` 提供了以下几种 ` filetype ` 选项
266
252
267
253
- f:file
268
254
- d:directory
@@ -349,7 +335,7 @@ drwxr-xr-x 6 junjiexun staff 192B 3 1 18:42 dir1/dir2
349
335
...(略)
350
336
```
351
337
352
- 或者 ` fd -l -o junjiexun:staff ` 也可以达到同样的效果,但是 ` fd ` 不支持单独搜索 group,也不支持通配符。
338
+ 或者 ` fd -l -o junjiexun:staff ` 也可以达到同样的效果,但是 ` fd ` 不支持单独搜索 group,也不支持通配符,如果你有想法的话可以给他提 issue 哦~
353
339
354
340
### 4.6 组合命令
355
341
@@ -367,11 +353,11 @@ $ fd java -X rm -rf
367
353
$ fd py -X vim
368
354
```
369
355
370
- 还可以使用诸如 ` unzip ` 、` ls ` 、` convert ` 等等其他常用的命令,也可以直接使用 ` | ` 管道符语法进一步处理。
356
+ 还可以使用诸如 ` unzip ` 、` ls ` 、` convert ` 等等其他常用的命令,也可以直接使用 * unix 语法 ` | ` 管道符语法进一步处理。
371
357
372
358
### 4.7 正则表达式
373
359
374
- 对于文件的内容搜索,我之前演示的是诸如 Hello、java、py 这样的完整文本 ,实际 ` fd ` 默认就是支持正则表达式对内容进行搜索的,但是正则表达式需要使用单引号包裹起来 ,我下面演示下
360
+ 对于文件的内容搜索,我之前演示的是诸如 Hello、java、py 都是这样的完整文本 ,实际 ` fd ` 默认就是支持正则表达式对内容进行搜索的,但是正则表达式需要使用单引号 ` ' ` 包裹起来 ,我下面演示下
375
361
376
362
所有 s 开头的文件都能被搜索出来
377
363
@@ -395,10 +381,14 @@ softdir3
395
381
sss.py
396
382
```
397
383
384
+ 上面的选项大部分都是可以同时使用的,我这里就不继续演示了,就当留个作业给大家吧~
385
+
386
+ ![ ] ( ./images/5.jpeg )
387
+
398
388
## 五、总结
399
389
400
- ` fd ` 是一个简单友好的命令行文件搜索工具,而且其开源的属性作为 Rust 源码学习的对象也是非常优秀的,给项目点个 star 吧,赶快行动起来吧~
390
+ ` fd ` 是一个简单友好的命令行文件搜索工具,而且其开源的属性作为 Rust 源码学习的对象也是非常优秀的,给这个项目点个 star 吧,赶快行动起来吧~
401
391
402
- 顺便文章转评赞一波,每一个点赞的人,将来都会大富大贵,一夜暴富 !
392
+ 顺便文章转评赞走一波,祝所有点赞的人,身体健康,大富大贵 !
403
393
404
- ![ ] ( ./images/5 .png )
394
+ ![ ] ( ./images/6 .png )
0 commit comments