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

2023-10-28

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.1

USAGE:
    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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • chatgpt赋能python:用Python编写手机APP的优势及方法

    用Python编写手机APP的优势及方法 随着移动互联网的快速发展 智能手机已经成为人们生活中不可缺少的一部分 越来越多的企业开始开发手机APP以便更好的服务用户 在开发手机APP的过程中 Python成为了一种备受关注的语言 本文将介绍P
  • C#基于串行通讯不同计算机数据库之间数据交换系统(原创作品,送论文查重报告)

    论文编号 C 005 论文题目 基于串行通讯不同计算机数据库之间数据交换系统 开发语言 C 包括内容 论文 可执行程序 源码 答辩ppt 外文翻译 进度表 程序操作演示录像 数 据 库 SQL 论文字数 7000字以上
  • 【计算机网络】I/O多路转接之poll

    不同与select使用三个位图来表示三个fdset的方式 poll使用一个 pollfd的指针实现 pollfd结构包含了要监视的event和发生的event 不再使用select 参数 值 传递的方式 同时 pollfd并没有最大数量限制
  • 如何轻松实现内网穿透?异地办公?调试微信小程序?

    步骤很简单 只需三步 1 从 https www i996 me 获取获取你的公网域名和访问Token 项目托管在 https github com bugfan i996 2 在Max Linux 环境下 Windows类似 打开一个终端
  • SSD,PCI-E,NVMe,M.2分类详解

    SSD PCI E NVMe M 2分类详解 首先说一下目前固态硬盘常用的两个接口 与主板相连的接口形状 SATA3和M 2 1 采用SATA3接口 目前机械硬盘采用的接口方式 的固态硬盘 在传输方式上与SATA3 的机械硬盘一样 速度的提
  • 雷军发布会刚结束,就能写出上万字原创文章!

    前言 看完雷军演讲会之后你有没有看到过很多文章 成千上万个字的原创文章 瞬间就出现了 这是一个一个字敲的吗 当然不是 是AI 话不多说直接上教程 把雷军的演讲整理到笔记中 可以是md格式 word格式等等 复制粘贴即可 打开网站 smart
  • git使用问题

    1 windows 7专业版使用sourceTree拉取代码的问题 之前一直用的好好的 今天拉不了代码了 错误如下 git c diff mnemonicprefix false c core quotepath false fetch o
  • Windows磁盘管理

    0x01 磁盘管理概述 磁盘管理是一项计算机使用时的常规任务 它是以一组磁盘管理应用程序的形式提供给用户的 他们位于计算机管理控制台中 它包括查错程序和磁盘碎片整理程序以及磁盘整理程序 来源百度百科 本文主要介绍的内容为磁盘整理程序中的分区
  • 关于api-ms-win-crt-runtime

    关于api ms win crt runtime 1 1 0 dll缺失的解决方案 问题原因 有时 我们在打开文件程序的时候经常出现一些关于以下的错误 无法启动此程序因为计算机中丢失api ms win crt runtime 1 1 0
  • 计算机含金量最高的证书

    第一种证书 计算机技术与软件专业资格考试证书 计算机技术与软件专业资格考试证书 是由国家人力资源和社会保障部 工业和信息化部领导的国家级考试 该考试分为 5 个专业类别 并分设了高 中 初级专业资格考试 共 28 个资格的考核 也是用人单位
  • 常用的相似度计算方法原理及实现

    在数据分析和数据挖掘以及搜索引擎中 我们经常需要知道个体间差异的大小 进而评价个体的相似性和类别 常见的比如数据分析中比如相关分析 数据挖掘中的分类聚类 K Means等 算法 搜索引擎进行物品推荐时 相似度就是比较两个事物的相似性 一般通
  • 计算机世界规整_20211110_周三

    计算机世界规整 20211110 周三 扫我查看
  • verilog之状态机详细解释(二)

    一 有限状态机设计的一般步骤 1 逻辑抽象 得出状态转换图 就是把给出的一个实际逻辑关系表示为时序逻辑函数 可以用状态转换表来描述 也可以用状态转换图来描述 这就需要 分析给定的逻辑问题 确定输入变量 输出变量以及电路的状态数 通常是取原因
  • 编译工具Make

    文章目录 make指令 指定目标 隐藏指令 通配符 伪目标 多目标 Makefile的命令 变量 变量的基础 赋值变量 函数调用 字符串操作函数 文件名操作函数 循环函数 条件判断函数 条件判断语句 隐式规则 隐式规则举例 隐式规则中的变量
  • 机器学习DGA域名检测

    恶意域名 恶意域名是指黑客在攻击过程中或者对目标网络实施控制时 使用dga算法生成的域名 这种域名通常硬编码在恶意软件中 我们在做流量分析时不仅要通过流量的指纹特征识别威胁 也可以通过检测是否解析了恶意域名来判断网络中是否存在肉鸡 传统DG
  • 小米盒子打开adb调试模式

    1 先打开开发者模式 进入小米电视设置 gt 进入关于 gt 找到产品型号 gt 在产品型号上面连续多次按ok 确认 键 gt 然后就会提示 您已处于开发者模式 2 开启adb 经过第一步开启开发者模式之后 现在可以返回到设置页面 进入 账
  • 2019年感:忆往昔考博岁月,看今朝花样年华

    人生的际遇谁又能说清楚 就像师范类毕业的女神梦想着当一名老师 结果却阴差阳错穿上了警服 而本应该奔波北上广深的程序员 却成为了一名大学老师 两条平行线的男女 却结为了连理 再如 一心准备中科院却因英语差一分惜败 几乎裸考的学校却可能结出果实
  • 计算机网络4--Internet结构

    本页内容 1 基本结构 2 结构图解 3 层次结构图解 1 基本结构 a 端系统通过接入ISP access ISPs 连接到Internet b 接入ISP必须进一步互连 保证任意两个主机可以互相发送分组 c 构成复杂的网络互连的网络 2
  • 多媒体开发计算机颜色相关知识

    颜色模式 颜色模式 颜色模型和颜色空间 计算机中的颜色格式 常用的颜色模型分类 RGB颜色模型 介绍 RGB模型的颜色空间 RGB555 RGB565 RGB24 RGB32 FFMPEG中定义的RGB色彩空间 显示器的颜色空间
  • 马斯克没继续的工作,我帮他继续下去

    还记得当初自己为什么选择计算机 埃隆 马斯克的第一份工作是在加拿大开始的 17岁时 他来到加拿大 但他的寻亲不遇 为了生存 他不得不打各种零工 包括在农场中种蔬菜和打扫粮仓 以及在木材厂锅炉房烧锅炉 后来 他在加拿大读大学时 开始在彼得银行

随机推荐

  • 依赖Linux内核源码编译模块报错arch_hweight.h:54:42: error: expected ‘:’ or ‘)’ before ‘POPCNT64

    问题描述 想要编译一个模块 单独加载到开发板上 一次需要依赖开发板的Linux内核源码进行编译这个模块 编译模块的Makefile如下 home beal wu norflash kernel是开发板使用的内核源码路径 执行make之后报错
  • Zookeeper闪退、报错JAVA_HOME is not set 解决方法

    打开服务端闪退 编辑打开zkServer cmd 在末尾添加 pause 查看报错原因 这里的报错原因是JAVA HOME is not set 没有设置JAVA HOME 这里我们可以看到zkService 启动的时候 加载zkEvn文件
  • mac浏览器没有网络,通讯软件(QQ、微信、飞书等)正常

    网上的方法 1 在网络dns里加 114 114 114 114 或者8 8 8 8 我自己试的是没有解决问题 2 关闭网络代理中的一些勾选 我电脑里本来就没有勾选 3 重置DNS 可能是mac版本不同 提示discoveryutil未找到
  • 企业数字化转型之道:3L8P转型模型

    作者 韩磊 摘要 数字化转型的本质是 在 数据 算法 定义的世界中 以数据服务的流动 化解复杂系统的不确定性 优化资源配置效率 企业数字化转型的本质则是以需求为中心 以数据为资产 以技术为手段 以人才为依托 快速构建能满足客户需求的 支持业
  • Java IO流

    1File类 java io File类 文件和文件目录路径的抽象表示形式 与平台无关 File 能新建 删除 重命名文件和目录 但 File不能访问文件内容本身 如果需要访问文件内容本身 则需要使用输入 输出流 想要在Java程序中表示一
  • 微信小程序之数据的同步渲染

    微信小程序之数据的同步渲染 结论 微信小程序通过setData方法实现数据的同步渲染 直接修改data无法实现同步渲染 setData工作原理 小程序分为逻辑层和渲染层 而每次逻辑层改变了 要借用Native运行 小程序的渲染层和逻辑层由两
  • ExayExcel 阿里出品的ExayExcel

    1 首先引入依赖
  • cJSON笔记——三种结构的cJSON数组

    最近的项目中 涉及对cJSON库的使用 特别是不同结构的cJOSN数组的运用 在此小结以下 1 指定 路径 文件类型 文件名 读取整个文本 brief param file dir 文件所在的路径 param file name 文件名 p
  • 模型参数量(Parameters)和计算量(FLOPs)获取【使用thop】

    Tips 针对部分开源代码没有提供相关计算网络参数量和计算量的代码 这里给出一个通用的获取网络的参数量和计算量的方法 使用thop即可快速获取 1 模型参数量和计算量 参数量 params 即为网络模型中含有多少个参数 与输入的数据无关 主
  • win11热点提示我们无法设置热点

    问题还原 首先是连接win11的热点时 手机总是显示正在获取IP地址 然后连不上 之前都好好的 也没干过啥 或者选择性失忆 然后一通瞎操作 把电脑IP都给整成自动ip去了 初步估计是点了 网络重置 了如图 公司设置了固定ip 接下来就难受了
  • vue+iview 进行table表格数据的更新显示,局部刷新

    hello 在这个新做了一个网站 想提高一下权重 麻烦看见的给我点一下哦 是吉他乐谱分享的哦 www lsjita com 使用vue iview进行vue后台管理系统 对iview不太熟悉 然后就出现了好多问题 上一个有记录 这个来区分一
  • HaaS Python + AI 隆重登场 使用 ESP32 + 摄像头 机器视觉实现水果识别

    水果识别系统 现在很多农场里边使用摘采机器人识别水果进行水果摘采 盒马超市也使用自动识别称来识别水果种类自动计费 本案例则是使用HaaS Python对摄像头图像进行采集 并调用HaaS云端积木能力对水果进行识别 1 背景知识 水果的种类繁
  • 【AI实战】快速搭建中文 Alpaca 33B 大模型 Chinese-Alpaca-33B

    AI实战 快速搭建中文 Alpaca 33B 大模型 Chinese Alpaca 33B 中文 33B 大模型 Chinese Alpaca 33B 环境配置 搭建过程 1 拉取 chinese alpaca lora 33b 2 合并l
  • 【python学习笔记】seaborn模块

    目录 热力图介绍 seaborn模块绘制热力图 热力图介绍 热力图是一种特殊的图表 它是一种通过对色块着色来显示数据的统计图表 在绘图时 需要指定每个颜色映射的规则 一般以颜色的强度或色调为标准 比如颜色越深的表示数值越大 程度越深 颜色越
  • spark运行报错:(null) entry in command string: null chmod 0644

    在WIndows操作系统中本地运行spark程序 报以下错误 null entry in command string null chmod 0644 后面是目的目录 解决方法 下载hadoop dll文件 并拷贝到c windows sy
  • JS中的call()和apply()方法和区别

    一 方法定义 apply 调用一个对象的一个方法 用另一个对象替换当前对象 例如 B apply A arguments 即A对象应用B对象的方法 call 调用一个对象的一个方法 用另一个对象替换当前对象 例如 B call A args
  • 分析996个词根在各大考纲词汇中的作用(五)总结精选篇

    CET4 CET6 GRE IELTS TOEFL 考研英语总的词汇量为14055 分析词根总数为996 有11544个单词分布在这些词根中 剩下的2511个词汇没有任何词根信息 本文精选5206个跟词根结合最紧密的单词 superword
  • KVM的HVM虚拟机使用非串口方式建立virsh console 连接

    在去年写的文章中 http blog csdn net dobell article details 14442457 写到了怎么利用serial 设备进行console连接 不过比较麻烦 因为1 需要修改虚拟机内部的grub启动选项 2
  • unity学习笔记-有关打包安卓apk的一些注意事项

    unity学习笔记 有关打包安卓apk的一些注意事项 打包到build project的时候报错 报错信息里出现了jdksdk等 打包报错显示andriodfestxml文件版本有问题 有关urp线管环境打包的时候的一些注意事项 在编辑器里
  • 一款开源的文件搜索神器,终于不用记 find 命令了

    Python微信订餐小程序课程视频 https blog csdn net m0 56069948 article details 122285951 Python实战量化交易理财系统 https blog csdn net m0 5606