一款开源的文件搜索神器,终于不用记 find 命令了

Python微信订餐小程序课程视频

https://blog.csdn.net/m0_56069948/article/details/122285951

Python实战量化交易理财系统

https://blog.csdn.net/m0_56069948/article/details/122285941

这是 HelloGitHub 推出的《讲解开源项目》系列,用一篇文章带你快速上手有趣的开源项目。

今天给大家推荐一个好用+开源的文件搜索工具——fd

该工具支持大多数主流操作系统,快来更新你的工具箱感受开源项目带来的便利吧!

一、fd 简介

你还在为寻找文件而烦恼吗?你还在为记不住 find 一大堆参数而烦恼吗?那就赶快来看看我这次推荐的项目 fd 吧!

项目地址:https://github.com/sharkdp/fd

官方简介:A simple, fast and user-friendly alternative to ‘find’

我这里先放一个图,让大家直观地感受下

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

这个优秀的项目是不是成功地引起了你的注意呢~

二、fd 如何安装

作为使用的第一步当然是要先安装啦~

fd 提供了各个操作系统平台的安装方式,再不济可以直接通过源码进行安装(前提是有 Rust 的环境噢)

2.1 一键安装

我这里以我本地的 Mac 使用 brew 为例

$ brew install fd

brew 也可以一键升级

$ brew upgrade fd

具体到各个平台的详细安装方法,你可以看这里 安装文档

2.2 源码安装

$ git clone https://github.com/sharkdp/fd.git
$ cd fd
$ cargo install --path .

2.3 查看帮助

无论哪种方式安装完成后,就可以直接使用了 -h--help 获取帮助了,--help 就不演示了,区别就是换成了详细的帮助说明,如果你以后忘记了某一个参数也记得使用 --help 来查看哦~

$ fd -h
fd 8.2.1USAGE:fd [FLAGS/OPTIONS] [] [<path>...]FLAGS:-H, --hidden 搜索隐藏的文件和目录-I, --no-ignore 不要忽略 .(git | fd)ignore 文件匹配--no-ignore-vcs 不要忽略.gitignore文件的匹配-s, --case-sensitive 区分大小写的搜索(默认值:智能案例)-i, --ignore-case 不区分大小写的搜索(默认值:智能案例)-F, --fixed-strings 将模式视为文字字符串-a, --absolute-path 显示绝对路径而不是相对路径-L, --follow 遵循符号链接-p, --full-path 搜索完整路径(默认值:仅限 file-/dirname)-0, --print0 用null字符分隔结果-h, --help 打印帮助信息-V, --version 打印版本信息OPTIONS:-d, --max-depth  设置最大搜索深度(默认值:无)-t, --type ... 按类型过滤:文件(f),目录(d),符号链接(l),可执行(x),空(e)-e, --extension ... 按文件扩展名过滤-x, --exec  为每个搜索结果执行命令-E, --exclude ... 排除与给定glob模式匹配的条目--ignore-file ... 以.gitignore格式添加自定义忽略文件-c, --color  何时使用颜色:never,*auto*, always-j, --threads  设置用于搜索和执行的线程数-S, --size ... 根据文件大小限制结果。
...

三、fd 快速上手演示

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

该目录大致是这样:

.
├── .hg
│   ├── HelloDjango.md
│   ├── HelloRust.md
│   ├── HelloVue.md
│   ├── HelloZooKeeper.md
├── dir1
│   ├── Hello.java
│   ├── World.java
│   └── dir2
│       ├── demo.py
│       ├── demo1.py
│       ├── dir3
│       │   ├── fd_demo.rs
│       │   └── fd_help.rs
│       └── sss.py
├── hello_fd.md
├── hello_java.md
├── java
│   ├── Hello.java
│   └── World.java
├── my_java.txt
├── python
│   ├── demo.py
│   ├── demo1.py
│   └── sss.py
└── rust
│   ├── fd_demo.rs
│   └── fd_help.rs
├── softdir3 -> dir1/dir2/dir3
└── sss.py -> dir1/dir2/sss.py

3.1 简单搜索

fd 直接跟想要搜索的内容,会递归搜索当前目录下的所有文件,列出文件名中包含目标内容的结果(结果为当前目录的相对路径)

$ fd Hello
dir1/Hello.java
java/Hello.java

3.2 包含隐藏目录

选项 -H--hidden

$ fd -H Hello
.hg/HelloDjango.md
.hg/HelloRust.md
.hg/HelloVue.md
.hg/HelloZooKeeper.md
dir1/Hello.java
java/Hello.java

3.3 大小写

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

选项 -i--ignore-case 忽略大小写。

$ fd -i Hello
dir1/Hello.java
hello_fd.md
hello_java.md
java/Hello.java

选项 -s--case-sensitive 严格匹配大小写。

$ fd -s hello
hello_fd.md
hello_java.md

3.4 返回绝对路径

选项 -a--absolute-path

$ fd -a Hello
/Users/junjiexun/fd_test/dir1/Hello.java
/Users/junjiexun/fd_test/java/Hello.java

3.5 返回文件列表详情

选项 -l--list-details 获得类似 ls -l 的效果。

$ fd -l hello
-rw-r--r--  1 junjiexun  staff     0B  3  1 18:42 dir1/Hello.java
-rw-r--r--  1 junjiexun  staff     0B  3  1 18:37 hello_fd.md
-rw-r--r--  1 junjiexun  staff     0B  3  1 18:37 hello_java.md
-rw-r--r--  1 junjiexun  staff     0B  3  1 18:38 java/Hello.java

3.6 搜索内容包含路径

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

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

$ fd xun
Nothing return...
$ fd -p xun
dir1
dir1/Hello.java
dir1/World.java
dir1/dir2
...(略)

3.7 包括 .gitignore 里的文件

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

不加该参数,可以看到结果集中 .java 的文件都被过滤了。

$ fd java
hello_java.md
java
my_java.txt

加上了 -I 之后结果中又包括了 .java 结尾的文件了。

$ fd -I java
dir1/Hello.java
dir1/World.java
hello_java.md
java
java/Hello.java
java/World.java
my_java.txt

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

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

四、高级搜索选项

4.1 按深度

选项 -d--max-depth ,当前路径算深度 1,dir3 下面的 rs 文件就是深度 4 了。

$ fd rs
dir1/dir2/dir3/fd_demo.rs
dir1/dir2/dir3/fd_help.rs
rust/fd_demo.rs
rust/fd_help.rs
$ fd -d 3 rs
rust/fd_demo.rs
rust/fd_help.rs

4.2 按文件类型

选项 -t--typefd 提供了以下几种 filetype 选项:

  • f:file
  • d:directory
  • l:symlink
  • x:executable
  • e:empty
  • s:socket
  • p:pipe
$ fd -t l
softdir3
sss.py
$ fd -t d
dir1
dir1/dir2
dir1/dir2/dir3
java
python
rust

我给所有的 py 文件都加了可执行权限

$ fd -t x
python/demo.py
python/demo1.py
python/sss.py

4.3 按扩展名

选项 -e--extension

$ fd -e md
hello_fd.md
hello_java.md

4.4 排除

选项 -E--exclude 支持通配符,排除所有包含字母 s 的结果。

$ fd -E '*s*'
dir1
dir1/Hello.java
dir1/World.java
dir1/dir2
dir1/dir2/demo.py
dir1/dir2/demo1.py
dir1/dir2/dir3
hello_fd.md
hello_java.md
java
java/Hello.java
java/World.java
my_java.txt
python
python/demo.py
python/demo1.py

可以看到所有的 rust、rs、sss、soft 都没有出现在结果集中。

4.5 按所有者

选项 -o--owner

$ fd -l -o junjiexun
drwxr-xr-x  5 junjiexun  staff   160B  3  1 18:42 dir1
-rw-r--r--  1 junjiexun  staff     0B  3  1 18:42 dir1/Hello.java
-rw-r--r--  1 junjiexun  staff     0B  3  1 18:42 dir1/World.java
drwxr-xr-x  6 junjiexun  staff   192B  3  1 18:42 dir1/dir2
-rw-r--r--  1 junjiexun  staff     0B  3  1 18:42 dir1/dir2/demo.py
...(略)

或者 fd -l -o junjiexun:staff 也可以达到同样的效果,但是 fd 不支持单独搜索 group,也不支持通配符,如果你有想法的话可以给他提 issue 哦~

4.6 组合命令

fd 提供了 -x--exec-X--exec-batch 来进行对搜索结果集的进一步处理

找到所有和 java 匹配的内容并且删除!(仅仅用做演示,rm -rf 慎用)

$ fd java -X rm -rf

找到所有的 py 并且通过 vim 打开

$ fd py -X vim

还可以使用诸如 unziplsconvert 等等其他常用的命令,也可以直接使用 *unix 语法 | 管道符语法进一步处理。

4.7 正则表达式

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

$ fd '^s.*'
dir1/dir2/sss.py
python/sss.py
softdir3
sss.py

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

$ fd -g 's*'
dir1/dir2/sss.py
python/sss.py
softdir3
sss.py

上面的选项大部分都是可以同时使用的,篇幅有限我这里就不继续演示了。

五、总结

fd 是一个简单友好的命令行文件搜索工具,而且其开源的属性作为 Rust 源码学习的对象也是非常优秀的,赶紧学起来吧!

《讲解开源项目》:https://github.com/HelloGitHub-Team/Article

如果你也对开源项目感兴趣,希望自己的文章或项目被更多人喜欢,点击加入《讲解开源项目》让我们一起分享有趣、入门级的开源项目吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C2审核模式(c2 audit mode)

C2审核模式&#xff08;c2 audit mode&#xff09;SQL Server C2 Audit 是为了满足美国国防部针对计算机的安全访问的安全评级要求而引入的。 SQL C2Audit 可以记录shutdown,restart,成功和失败的Login,成功或者失败访问数据库对象&#xff0c;所欲数据定义的执行&#xff0c;数…

开发者必读:2022年移动应用趋势洞察白皮书

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 华为开发者联盟与艾瑞咨询联合发布《2022年移动应用趋势洞察白皮书》&#xff0c;本…

Java 阶段面试 知识点合集 - 我们到底能走多远系列(15)

我们到底能走多远系列&#xff08;15&#xff09; 扯淡&#xff1a;这些知识点来源是通过面试涉及到的&#xff0c;面的公司不多&#xff0c;知识点涉及也不多&#xff0c;我每次面试后都在备忘录里写下有用的东西&#xff0c;集合起来分享一下&#xff0c;因为是知识点&#x…

对比学习 ——simsiam 代码解析。

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 ​ 目录 1 &#xff1a; 事先准备 。 2 &#xff1a; 代码阅读。 2.1: 数据读取…

wiki常用语法

为什么80%的码农都做不了架构师&#xff1f;>>> 说明 输入 效果 作用在任何地方 斜体字 斜体字 斜体字 粗体字 粗体字 粗体字 粗体加斜体 粗体加斜体 粗体加斜体 下划线 &#xff08;推荐替代斜体&#xff09; <u>下划线</…

【ASP.NET Web API教程】3.3 通过WPF应用程序调用Web API(C#)

注&#xff1a;本文是【ASP.NET Web API系列教程】的一部分&#xff0c;如果您是第一次看本博客文章&#xff0c;请先看前面的内容。 3.3 Calling a Web API From a WPF Application (C#) 3.3 通过WPF应用程序调用Web API(C#) 本文引自&#xff1a;http://www.asp.net/web-api/…

java开发过程中的命名规范

为什么80%的码农都做不了架构师&#xff1f;>>> 最近在读项目的过程中&#xff0c;发现好多同事的代码并不是很规范&#xff0c;有的包名也按照了驼峰的写法&#xff0c;虽说这样不是不行&#xff0c;但个人认为开发过程中应该遵守这些规范&#xff0c;现整理规范如…

git 使用方法自用(勿进)本地开发分支推上线上开发分支

一、//查看状态 1.git status 二、//查看改了哪个文件夹 1.git diff 2.//会出现改了哪个文件夹src/components/partials/Slider.js 三、//查看改了的文件夹里面具体改了啥内容 1.git diff src/components/partials/Slider.js 四、提交所有 1. git add . 五、写备注…

SVG 和 CSS3 实现一个超酷爱心 Like 按钮

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 在现代网页中&#xff0c;我们经常可以在一些文章、视频和图片页面上找到”Like”按…

redis简单学习3-redis常用命令总结

2019独角兽企业重金招聘Python工程师标准>>> 1.键值相关的命令 keys 返回满足给定pattern的所有key 表达式* 代表取出所有的key redis 127.0.0.1:6379> keys * 1) "myzset2" 2) "myzset3" 3) "mylist" 4) "myset2" 5)…

微软的创新还是败笔?Windows 8为苹果创造天赐良机

网络安全公司Avast近日公布的数据显示&#xff1a;Windows系统使用人数正在不断下降。这一结果对微软来说可谓噩梦&#xff0c;于此同时&#xff0c;苹果则不断加强市场占有率。又是什么导致了这样的结果&#xff1f;接下来就看看最主要的几点&#xff1a; 调查覆盖了13.5万Wi…

testbench常用任务之SPI slave输出数据

模仿了SPI master从SPI slave读取数据的MiSO数据状态 每8个clk后读取的数据加1 用的一些额外寄存器需要自己声明和初始化 //------------------------------------------------------------------------- //send serial data which is increase by 1 on MiSO line //----------…

Vue生产环境调试的方法

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 vue 生产环境默认是无法启用vue devtools的&#xff0c;如果生产应用出了问题&…

RavenDB:基于Windows/.NET平台的NoSQL数据库

众所周知&#xff0c;NoSQL运动旨在成为大数据时代传统关系数据库管理系统的替代品。如今Microsoft对开源的态度有所转变&#xff0c;RavenDB就是很好的例子。Microsoft对RavenDB&#xff08;NoSQL数据库&#xff09;的认可令很多人感到惊讶。RavenDB可以轻易的替代关系数据库管…

JDBC实例--JDBC连接池技术解密,连接池对我们不再陌生

一、为什么我们要用连接池技术&#xff1f; 前面的数据库连接的建立及关闭资源的方法有些缺陷。统舱传统数据库访问方式&#xff1a;一次数据库访问对应一个物理连接,每次操作数据库都要打开、关闭该物理连接, 系统性能严重受损。 解决方案&#xff1a;数据库连接池&#xff08…

重温51汇编指令(附实验)

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 重温51汇编指令&#xff08;附实验&#xff09; 写在前面&#xff1a; 在电子控制…

SSH HTTPS 公钥、秘钥、对称加密、非对称加密、 总结理解

2019独角兽企业重金招聘Python工程师标准>>> 作者&#xff1a;shede333主页&#xff1a;http://my.oschina.net/shede333 && http://blog.sina.com.cn/u/1509658847版权声明&#xff1a;原创文章&#xff0c;版权声明&#xff1a;自由转载-非商用-非衍生-保…

升级nginx,查看已经安装的模块,并隐藏或者修改版本号

升级前&#xff0c;查看已经安装的版本以及模块[rootmail ~]# /opt/nginx/sbin/nginx -Vnginx version: nginx/0.5.34 built by gcc 3.4.6 20060404 (Red Hat 3.4.6-3)configure arguments: --prefix/opt/nginx --sbin-path/opt/nginx/sbin/nginx --conf-path/opt/nginx/conf/n…

SpringCloudAlibaba微服务docker容器打包和部署示例实战

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 概述 我们使用前面《SpringCloudAlibaba注册中心与配置中心之利器Nacos实战与源码…

MongoVUE的Collections数据不显示的解决方法

问题描述&#xff1a; 使用 mongoDB数据库&#xff0c; 数据添加成功了&#xff0c;使用命令行能查询出来&#xff0c;但在MongoVUE 中数据却不显示 (我使用的是 mongoDB 3.4 的版本) 原因&#xff1a;引擎问题&#xff0c;只要降到2.X版本就可以显示了     3.x默认是wire…