当前位置:首页 > 科技  > 软件

fd:一个比Find简单十倍的文件查找命令

来源: 责编: 时间:2024-04-19 17:24:19 296观看
导读今天给大家带来一个超级实用的小工具——fd。这货是干嘛的呢?简单来说,它就是用来在你的文件系统中查找文件和目录的。想象一下,你在一大堆文件中找一个特定的文件,手动找得眼花缭乱?别担心,fd来拯救你!fd是find命令的一个替

今天给大家带来一个超级实用的小工具——fd。这货是干嘛的呢?简单来说,它就是用来在你的文件系统中查找文件和目录的。想象一下,你在一大堆文件中找一个特定的文件,手动找得眼花缭乱?别担心,fd来拯救你!P5N28资讯网——每日最新资讯28at.com

P5N28资讯网——每日最新资讯28at.com

fd是find命令的一个替代品,但它更简单、更快,而且用起来更顺手。它可能不支持find所有的强大功能,但对于大多数使用场景来说,它提供了合理的(有观点的)默认设置。接下来,咱们就来看看怎么用这个小家伙吧!P5N28资讯网——每日最新资讯28at.com

特点

  • 直观的语法:用fd PATTERN代替find -iname '*PATTERN*'。
  • 支持正则表达式(默认)和通配符模式。
  • 由于并行遍历目录,速度非常快。
  • 使用颜色来高亮不同的文件类型(和ls命令一样)。
  • 支持并行命令执行。
  • 智能大小写:默认情况下搜索是不区分大小写的。如果模式中包含大写字符,它就会切换到区分大小写。
  • 默认情况下,忽略隐藏目录和文件。
  • 默认情况下,忽略你的.gitignore中的模式。
  • 命令名字比find短了50%。

如何使用

首先,如果你想快速了解所有可用的命令行选项,可以运行fd -h来获取简洁的帮助信息,或者运行fd --help来获取更详细的版本。P5N28资讯网——每日最新资讯28at.com

简单搜索

fd的设计目的就是在你的文件系统中查找条目。最基本的搜索你能做的就是用一个参数运行fd:搜索模式。比如,你想找一个包含"netfl"的老脚本:P5N28资讯网——每日最新资讯28at.com

> fd netflSoftware/python/imdb-ratings/netflix-details.py

如果我们只用一个参数这样调用fd,它会递归地在当前目录中搜索包含模式"netfl"的任何条目。P5N28资讯网——每日最新资讯28at.com

正则表达式搜索

搜索模式被视为正则表达式。这里,我们搜索以"x"开头以"rc"结尾的条目:P5N28资讯网——每日最新资讯28at.com

> cd /etc> fd '^x.*rc$'X11/xinit/xinitrcX11/xinit/xserverrc

fd使用的正则表达式语法在这里有文档说明。P5N28资讯网——每日最新资讯28at.com

指定根目录

如果我们想搜索一个特定的目录,可以将其作为第二个参数传递给fd:P5N28资讯网——每日最新资讯28at.com

> fd passwd /etc/etc/default/passwd/etc/pam.d/passwd/etc/passwd

递归列出所有文件

fd可以不带任何参数调用。这对于快速概览当前目录中的所有条目(递归地,类似于ls -R)非常有用:P5N28资讯网——每日最新资讯28at.com

> cd fd/tests> fdtestenvtestenv/mod.rstests.rs

如果你想用这个功能来列出给定目录中的所有文件,你必须使用一个通配符模式,比如.或^:P5N28资讯网——每日最新资讯28at.com

> fd . fd/tests/testenvtestenv/mod.rstests.rs

搜索特定文件扩展名

多时候,我们对某种类型的所有文件感兴趣。这可以通过-e(或--extension)选项来实现。这里,我们搜索fd仓库中所有的Markdown文件:P5N28资讯网——每日最新资讯28at.com

> cd fd> fd -e mdCONTRIBUTING.mdREADME.md

-e选项可以与搜索模式结合使用:P5N28资讯网——每日最新资讯28at.com

> fd -e rs modsrc/fshelper/mod.rssrc/lscolors/mod.rstests/testenv/mod.rs

搜索特定文件名

要找到与提供的搜索模式完全匹配的文件,可以使用-g(或--glob)选项:P5N28资讯网——每日最新资讯28at.com

> fd -g libc.so /usr/usr/lib32/libc.so/usr/lib/libc.so

隐藏和忽略的文件

默认情况下,fd不搜索隐藏目录,也不会在搜索结果中显示隐藏文件。要禁用这种行为,我们可以使用-H(或--hidden)选项:P5N28资讯网——每日最新资讯28at.com

> fd pre-commit> fd -H pre-commit.git/hooks/pre-commit.sample

如果我们在包含Git仓库的目录中工作(或包含Git仓库),fd不会搜索(也不会显示)匹配.gitignore模式的文件夹和文件。要禁用这种行为,我们可以使用-I(或--no-ignore)选项:P5N28资讯网——每日最新资讯28at.com

> fd num_cpu> fd -I num_cputarget/debug/deps/libnum_cpus-f5ce7ef99006aa05.rlib

要真正搜索所有文件和目录,只需将隐藏和忽略功能结合起来显示所有内容(-HI),或使用-u/--unrestricted。P5N28资讯网——每日最新资讯28at.com

匹配完整路径

认情况下,fd只匹配每个文件的文件名。然而,使用--full-path或-p选项,你可以匹配完整路径。P5N28资讯网——每日最新资讯28at.com

> fd -p -g '**/.git/config'> fd -p '.*/lesson-//d+/[a-z]+.(jpg|png)'

命令执行

除了仅仅显示搜索结果,你通常还想对它们做点什么。fd提供了两种方法来为你的每个搜索结果执行外部命令:P5N28资讯网——每日最新资讯28at.com

  • -x/--exec选项为每个搜索结果运行一个外部命令(并行)。
  • -X/--exec-batch选项启动一次外部命令,将所有搜索结果作为参数。

示例

递归查找所有zip压缩文件并解压它们:P5N28资讯网——每日最新资讯28at.com

如果有两个这样的文件,file1.zip和backup/file2.zip,这将执行unzip file1.zip和unzip backup/file2.zip。如果文件足够快地被发现,这两个unzip进程将并行运行。P5N28资讯网——每日最新资讯28at.com

找到所有的.h和.cpp文件,并用clang-format -i就地自动格式化它们:P5N28资讯网——每日最新资讯28at.com

> fd -e h -e cpp -x clang-format -i

注意,clang-format的-i选项可以作为一个单独的参数传递。这就是为什么我们把-x选项放在最后。P5N28资讯网——每日最新资讯28at.com

找到所有的test_*.py文件并在你最喜欢的编辑器中打开它们:P5N28资讯网——每日最新资讯28at.com

注意,我们这里使用大写的-X来打开单个vim实例。如果有两个这样的文件,test_basic.py和lib/test_advanced.py,这将运行vim test_basic.py lib/test_advanced.py。P5N28资讯网——每日最新资讯28at.com

要查看文件权限、所有者、文件大小等详细信息,你可以让fd通过运行ls为每个结果显示它们:P5N28资讯网——每日最新资讯28at.com

> fd … -X ls -lhd --color=always

这个模式非常有用,以至于fd提供了一个快捷方式。你可以使用-l/--list-details选项以这种方式执行ls:fd … -l。P5N28资讯网——每日最新资讯28at.com

-X选项结合fd和ripgrep (rg)使用也很有用,以便在某个特定类别的文件中搜索,比如所有的C++源文件:P5N28资讯网——每日最新资讯28at.com

> fd -e cpp -e cxx -e h -e hpp -X rg 'std::cout'

将所有.jpg文件转换为.png文件:P5N28资讯网——每日最新资讯28at.com

> fd -e jpg -x convert {} {.}.png

这里,{}是一个占位符,将被搜索结果的路径替换(documents/images/party.jpg)。{.}和{}类似,但没有文件扩展名(documents/images/party)。{/}是一个占位符,将被搜索结果的基础名替换(party.jpg)。{//}是发现路径的父目录(documents/images)。{/.}是基础名,扩展名已去除(party)。如果你不包括一个占位符,fd会自动在最后添加一个{}。P5N28资讯网——每日最新资讯28at.com

并行与串行执行

对于-x/--exec,你可以使用-j/--threads选项控制并行作业的数量。使用--threads=1进行串行执行。P5N28资讯网——每日最新资讯28at.com

排除特定的文件或目录

有时候我们想要忽略来自特定子目录的搜索结果。例如,我们可能想要搜索所有隐藏的文件和目录(-H),但排除所有来自.git目录的匹配项。我们可以使用-E(或--exclude)选项来实现这一点。它接受一个任意的glob模式作为参数:P5N28资讯网——每日最新资讯28at.com

我们也可以使用它来跳过挂载的目录:P5N28资讯网——每日最新资讯28at.com

> fd -E /mnt/external-drive …

..或者跳过某些文件类型:P5N28资讯网——每日最新资讯28at.com

要使这些排除模式永久化,可以创建一个.fdignore文件。它们的工作方式类似于.gitignore文件,但是特定于fd。例如:P5N28资讯网——每日最新资讯28at.com

> cat ~/.fdignore/mnt/external-drive*.bak

注意P5N28资讯网——每日最新资讯28at.com

fd还支持其他程序使用的.ignore文件,如rg或ag。如果你想让fd全局忽略这些模式,可以将它们放在fd的全局忽略文件中。这通常位于macOS或Linux的~/.config/fd/ignore中,Windows中位于%APPDATA%/fd/ignoreP5N28资讯网——每日最新资讯28at.com

删除文件

你可以使用fd删除所有与你的搜索模式匹配的文件和目录。如果你只想删除文件,可以使用--exec-batch/-X选项调用rm。例如,要递归删除所有.DS_Store文件,请运行:P5N28资讯网——每日最新资讯28at.com

fd -H '^/.DS_Store$' -tf -X rm

如果你不确定,总是先在没有-X rm的情况下调用fd。或者,使用rm的“交互式”选项:P5N28资讯网——每日最新资讯28at.com

> fd -H '^//.DS_Store$' -tf -X rm -i

如果你想删除某类目录,可以使用同样的技术。你将不得不使用rm的--recursive/-r标志来删除目录。P5N28资讯网——每日最新资讯28at.com

注意P5N28资讯网——每日最新资讯28at.com

使用fd … -X rm -r可能会引起竞态条件的情况:如果你有一个像…/foo/bar/foo/…这样的路径,并且想要删除所有名为foo的目录,你最终可能会遇到外层foo目录首先被删除的情况,导致(无害的)"'foo/bar/foo':没有这样的文件或目录"错误在rm调用中。P5N28资讯网——每日最新资讯28at.com

命令行选项

这是fd -h的输出。要查看所有命令行选项的完整集合,请使用fd --help,其中也包括更详细的帮助文本。P5N28资讯网——每日最新资讯28at.com

用法:fd [OPTIONS] [pattern] [path]...P5N28资讯网——每日最新资讯28at.com

参数:P5N28资讯网——每日最新资讯28at.com

[pattern] 搜索模式(正则表达式,除非使用'--glob';可选)P5N28资讯网——每日最新资讯28at.com

[path]... 文件系统搜索的根目录(可选)P5N28资讯网——每日最新资讯28at.com

选项:P5N28资讯网——每日最新资讯28at.com

-H, --hidden 搜索隐藏的文件和目录P5N28资讯网——每日最新资讯28at.com

-I, --no-ignore 不遵守.(git|fd)ignore文件P5N28资讯网——每日最新资讯28at.com

-s, --case-sensitive 大小写敏感搜索(默认:智能大小写)P5N28资讯网——每日最新资讯28at.com

-i, --ignore-case 大小写不敏感搜索(默认:智能大小写)P5N28资讯网——每日最新资讯28at.com

-g, --glob 基于通配符的搜索(默认:正则表达式)P5N28资讯网——每日最新资讯28at.com

-a, --absolute-path 显示绝对路径而非相对路径P5N28资讯网——每日最新资讯28at.com

-l, --list-details 使用带有文件元数据的长列表格式P5N28资讯网——每日最新资讯28at.com

-L, --follow 跟随符号链接P5N28资讯网——每日最新资讯28at.com

-p, --full-path 搜索完整的绝对路径(默认:仅文件名)P5N28资讯网——每日最新资讯28at.com

-d, --max-depth 设置最大搜索深度(默认:无限制)P5N28资讯网——每日最新资讯28at.com

-E, --exclude 排除与给定的glob模式匹配的条目P5N28资讯网——每日最新资讯28at.com

-t, --type 按类型过滤:文件(f)、目录(d/dir)、符号链接(l)、可执行文件(x)、空(e)、套接字(s)、管道(p)、块设备(b)、字符设备(c)P5N28资讯网——每日最新资讯28at.com

-e, --extension 按文件扩展名过滤P5N28资讯网——每日最新资讯28at.com

-S, --size 根据文件大小限制结果P5N28资讯网——每日最新资讯28at.com

--changed-within 按文件修改时间过滤(比这新的)P5N28资讯网——每日最新资讯28at.com

--changed-before 按文件修改时间过滤(比这旧的)P5N28资讯网——每日最新资讯28at.com

-o, --owner user:group 按拥有者和/或组过滤P5N28资讯网——每日最新资讯28at.com

-x, --exec ... 对每个搜索结果执行命令P5N28资讯网——每日最新资讯28at.com

-X, --exec-batch ... 一次性用所有搜索结果执行命令P5N28资讯网——每日最新资讯28at.com

-c, --color 使用颜色的时候 [默认:auto] [可能的值:auto, always, never]P5N28资讯网——每日最新资讯28at.com

-h, --help 打印帮助(查看更多使用'--help')P5N28资讯网——每日最新资讯28at.com

-V, --version 打印版本P5N28资讯网——每日最新资讯28at.com

以上就是fd工具的详细介绍,希望这个小工具能在你的日常开发和文件管理中大显身手!如果你有任何问题或建议,欢迎到fd的GitHub仓库: https://github.com/sharkdp/fd 提出。记得,保持文件系统的整洁,让查找文件变得更简单!P5N28资讯网——每日最新资讯28at.com


P5N28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-84189-0.htmlfd:一个比Find简单十倍的文件查找命令

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 探索C++:十大让代码简洁的特性

下一篇: 一篇文章带你了解JavaScript switch

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • 官方承诺:K60至尊版将会首批升级MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版将会搭载天玑9200+处理器和独显芯片X7的同时,Redmi给出了官方承诺,K60至尊重大更新首批升级,会首批推送MIUI 15。也就是说虽然
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • 2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的“头腾
  • 电视息屏休眠仍有网络上传 爱奇艺被质疑“薅消费者羊毛”

    记者丨宁晓敏 见习生丨汗青出品丨鳌头财经(theSankei) 前不久,爱奇艺发布了一份亮眼的一季报,不仅营收和会员营收创造历史最佳表现,其运营利润也连续6个月实现增长。自去年年初
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 重估百度丨大模型,能撑起百度的“今天”吗?

    自象限原创 作者|程心 罗辑2023年之前,对于自己的“今天”,百度也很迷茫。“新业务到 2022 年底还是 0,希望 2023 年出来一个 1。”这是2022年底,李彦宏
  • 三星推出Galaxy Tab S9系列平板电脑以及Galaxy Watch6系列智能手表

    2023年7月26日,三星电子正式发布了Galaxy Z Flip5与Galaxy Z Fold5。除此之外,Galaxy Tab S9系列平板电脑以及三星Galaxy Watch6系列智能手表也同期
Top