Linux杂谈之Glob文件名模式匹配

article/2025/10/28 1:32:34

一  Glob

①  初识

glob 最早是出现在'类Unix系统'的命令行中,是用来'匹配文件路径'的1)在最新的 CentOS 7 中已经'删除'了 glob 的相关描述文档2)删除的'原因'由于 glob 已经'整合'到了 shell 之中,然后就有了 'shell 通配符'常见: 涉及'glob'的相关命令 --> ls、touch、find、mv、vim、rm、tar等补充: 任何以'.开头命名的文件'都必须在glob中'显示指定'才能匹配案例: 比如有一个'隐藏'文件'.abc',那么rm *'匹配不到'.abc,只能使用rm .*glob与正则表达式不一样:1) glog只匹配'路径名',而'不是'匹配文件的'内容'2) 并且glob与正则表达式虽然有'部分相同的通配符',但是'意义'却不一样

②  glob通配符讲解

1) *:匹配一个路径部分中'0个或多个'字符2) ?:匹配'一个'字符shell glob模式: '​​*​​' 可以匹配除了'/​​以外'的任何东西,"​​?​​" 可以匹配除了"​/​​"以外的任意字符3)[]:匹配'字符集中的单个'字符 -->'[方括号]'注意1: 在[^…]和[!…]表示匹配'不在列表中'的字符,如[^abc]匹配除了a, b, c以外的字符注意2: 包含在[]中的字符'只会'被匹配一个,并且[]里面'不可以为空'注意3: []里面可以包含[,],!,?,*,\这些'特殊'字符,需要'转义'注意4: 可以使用横杠'-',例如:[a-z]需求: 如果要匹配'-',则可以把-放在'前面'或者'后面'比如: [-a0-9]匹配-,a,0到9中的'任意'字符如果要匹配!,则需要进行转义4) 补充: 上面所有通配符只匹配'单层'路径,不能跨目录匹配,即'无法匹配子目录'里面的文件--> 或者说'?或*'这样的通配符,'不能'匹配路'径分隔符(/)'5)**:代表'0或多个'层级的目录,匹配所有'文件、目录、子目录、子目录下的文件'案例: 比如'a/**/z' 可以匹配 'a/z'、 'a/b/z' 或 'a/b/c/z'等ls */*.txt --> 要'匹配子目录(一层)'里面的文件补充:bash version >= 4.0 shopt -s globstar确认globstar打开,否则'**'会被翻译成*使用重点: 不同语言的 glob 库支持的规则会'略有不同'

 node-glob

特殊的'shell'通配符: 1) 使用'{花括号}'{a..c}、{a,b,c} --> '其他语言也可以使用' -->'brace'扩展案例1: ls {"au",[bc]}* --> 列出以 'au','b','c' 开头的文件案例2: ls init*[a-z]   --> 列出所有文件中'以 init' 开头,'英文结尾'的文件2) ~'家目录'、 -'之前目录'3) POSIX风格 --> [::] '专用字符集' 和 [[::]] [:alnum:]  --> 任意'数字'或者'字母'[:alpha:]  --> 任意'字母'[:space:]  --> '空格'[:lower:]  --> '小写'字母[:digit:]  --> 任意'数字' --> {0..9}[:upper:]  --> 任意'大写'字母[:cntrl:]  --> 控制符[:print:]  --> 可'打印'字符[:punct:]  --> 标点符号[:xdigit:] --> 十六进制数[:blank:]  --> 空白字符案例: ls [[:lower:]]*[0-9]* --> 匹配以任意'小写字母开头','中间包含数字'的文件4) !:'排除'文件,如!a.js表示'排除文件a.js' -->'其他语言的glo也支持'5) \x:匹配字符x,用于'转义'符号细节: 通配符的过程中可能会遇到'文件名中'包含了'特殊(空格或*之类)'字符,用'单引号'包括

③   shell执行glob通配符的原理

1)通配符是'先解释','再执行'解读:bash 接收到命令以后,发现里面有通配符,会'先进行通配符扩展',然后再'执行命令'案例: ls w*.txtwzj.txt上面命令的'执行过程'是,bash 先将w*.txt扩展成wzj.txt,然后再执行ls ab.txt。2)通配符'不匹配',会'原样输出'bash 扩展通配符的时候,发现'不存在'匹配的文件,会将通配符'原样输出'

④  shopt各种glob模式

1) dotglob:	bash在'文件名扩展'的结果中包括'以点(.)开头'的文件名2) extglob:	打开扩展的模式匹配特性,'正常的表达式元字符'来自Korn shell的文件名扩展[1]、shopt -u extglob  --> '关闭'extglob shell选项[2]、shopt -s extglob  --> '打开'extglob shell选项3) nocaseglob:	如果设置,当执行文件名扩展时,bash在'不区分大小写'的方式下匹配文件名4) nullglob: 如果设置,bash允许没有匹配任何文件的文件名模式'扩展成一个空串',而不是他们本身理解: GLOBIGNORE'变量'解读: GLOBIGNORE allows you to 'specify patterns' a glob 'should not match'
​
set -f:等同于set -o noglob ,表示'禁止'用路径名扩展,即'取消'通配符

⑤  extglob模式细讲

需求1: 删除目录下'除了filename之外'的所有文件rm -v !("filename")需求2: 删除除了'filename1和filename2之外'的所有文件rm -v !("filename1"|"filename2")需求3: 删除'除了.zip 之外'的所有文件rm -i !(*.zip)

⑥  IDEA .ignore插件

.ignore是IDEA的一款'专用忽略文件的插件',其支持的忽略文件类型'自己常用的'有:1).gitignore (Git)2).npmignore (NPM)3).dockerignore (Docker)4).chefignore (Chef)5).cvsignore (CVS)6).helmignore (Kubernetes Helm)说明: 不同的'语言'glob有一些差异性,本文主要讲解'unix的 glob'

⑦  .gitignore规则讲解

1) git 的 .gitignore 文件可以使用 'glob 模式'匹配2) 另外还有一些规则:[1]、所有'空行'或者以 '# 开头的行'都会被 git 忽略[2]、匹配模式可以'以 / '开头防止递归[3]、匹配模式可以'以 / 结尾'指定目录[4]、要'忽略指定模式以外'的文件或目录,可以在模式前加上'感叹号 !' 取反3) 需求需求1: 忽略'wzj'文件和目录,非递归wzj 需求2: 仅'忽略wzj文件',而'不忽略wzj目录',其中"感叹号!"表示反向操作!wzj/需求3: 仅'忽略wzj'目录下面的文件和文件夹,而'wzj文件'不会忽略wzj/需求4: 连续的'两个星号**'具有特殊的含义​​**/​​​ 开头表示匹配所有目录;例如: "​​**/foo​​​" 匹配'所有目录下'名称为foo的文件和文件夹**/foo/bar​​ 匹配所有'foo文件夹下'名称为'bar'的'文件'和'文件夹'"​​/**​​​" 结尾表示匹配在他下面的所有东西例如: "​​abc/**​​​" 匹配所有在'abc文件夹'下的文件,abc路径是相对于​​.gitignore​​ "​​/**/​​​"匹配'零到多个'文件夹例如: "​​a/**/b​​​"可以匹配'a/b​​​', 'a/x/b​​​', '​​a/x/y/b​​'等等4) 补充*.a   --> # 忽略所有的.a格式的文件/TODO --> # 只忽略当前文件夹下面的TODO文件,而'不会递归子文件夹'build/ --> #忽略所有build文件夹下面的文件和文件夹doc/*.txt --> #忽略doc文件夹下面的.txt文件,但是不会递归子文件夹下面的.txtdoc/**/*.pdf  --> # 递归忽略doc文件夹下面的所有的.pdf文件5) 细节点(1)git '跟踪文件',而不是目录;(2)在 .gitignore 文件中,'每行表示一种模式'(3)如果本地仓库文件'已被跟踪',那么即使在 .gitignore 中设置了忽略,也不起作用。(4).gitignore 文件也会被上传的到远程仓库,同一个仓库的人可以'使用同一个'.gitignore 文件

http://chatgpt.dhexx.cn/article/sbq2CnWu.shtml

相关文章

Python 中glob.glob()、glob.iglob()的使用

Python 中glob.glob()的使用 glob.glob(path)的功能: 返回符合path格式的所有文件的路径,以list存储返回。 glob.iglob(path)的功能: 返回符合path格式的一个文件的路径。 path的表示方法: 利用匹配符:"* "…

SSM项目小例子,SSM整合图文详细教程

SSM项目小例子 今天来搭建一个SSM项目的小例子简单练一练,那项目模板还是我们那个模板,就是我们在JavaWeb最后的小例子,那到SSM中我们如何实现,后面我们再看看springboot中如何实现 javaweb中项目例子:https://blog.cs…

SSM整合之登录注册

一、概述 本文以一个登录注册的小功能作为示例,对SSM框架做一个整合。 二、SSM整合 SSM框架是指Spring、SpringMVC和Mybatis,SpringMVC是包含在Spring中的,因此SSM框架整合核心是将Mybatis整合到Spring中。 2.1 DAO 1. 创建如下的数据库表格…

遇见狂神说SSM整合项目梳理详解

在跟B站的狂神学习的时候有一模块是SSM整合的一个小项目,虽然spring、springmvc、mybatis我都学过,但是整合到一起还是思路不清晰,就很懵,整合的一个小项目,让我知道了什么叫配置地狱,就是熟悉又陌生的感觉…

SSM整合Quartz

Quartz 1.整合1.1 mysql中创建quartz表1.2 添加quartz依赖1.3 添加quartz.properties与数据库关联1.4 编写quartzConfig文件1.4.1 quartz的初始化配置1.4.2 创建job 实例工厂 1.5 编写定时任务1.5.1 静态方式编写定时任务1.5.2 动态方式编写定时任务 2.quartz2.1 quartz概念2.2…

SSM 整合

目录 第六章 SSM 整合导图第一节 Spring 和 Mybatis 整合1、思路2、Mybatis-Spring技术3、总体 SSM 整合所需依赖4、配置数据源①创建 jdbc.properties②加入日志配置文件③创建 Spring 配置文件④创建 junit 测试类 5、配置 SqlSessionFactoryBean①创建 Mybatis 全局配置文件…

SSM整合Vue

昨日知识点总结 今日总结 文章目录 一.昨日知识 1.表单验证2.上传组件3.时间插件4.ElementUI简介 二.今日总结 1.页面静态化 通过html页面,制作展示所有制作添加页面 制作修改页面以及批量删除制作分页制作多条件查询 一、昨日重点复习 1.表单验证 在vue中使用rule…

SSM整合过程梳理

文章目录 前言一.SSM整合流程二.整合配置2.1添加依赖2.2创建项目包结构2.3创建SpringConfig配置类2.4创建JdbcConfig配置类2.5创建MybatisConfig配置类2.6创建jdbc.properties2.7创建SpringMVC配置类2.8创建Web项目入口配置类 三.功能模块3.1创建模型类3.2编写Dao接口3.3编写Se…

ssm整合详解

最近做项目用到了ssm,虽然以前用过ssm但这段时间发现,用过不代表就会了,即使以前用过,但现在要搭一个ssm框架不看教程还是很难,最基本的maven仓库需要哪些坐标都搞不清楚,所以今天打算写篇博客梳理一下。 一.基础梳理…

SSM整合分页插件

目录 一.环境配置 1.分页插件依赖 2.在Mybatis里面配置的内容 二.使用分页插件 1.在ServiceImpl层开启分页插件&#xff08;即查询数据库前开启&#xff09; 2.控制器方法 3.jsp页面进行整理 4.效果 5. 样式 6.常用的数据说明 一.环境配置 1.分页插件依赖 <depend…

SSM整合总结

这几天学完spring&#xff0c;springMVC&#xff0c;mybatis后&#xff0c;这两天试着去整合ssm&#xff0c;整合过程并不顺利&#xff0c;一是基础知识有的忘了&#xff0c;细节不能把握住&#xff0c;造成各种报错.看了各种视频&#xff0c;翻阅各种文章&#xff0c;多多少少…

SSM整合shiro

1.完成ssm整合shiro 企业中老项目还在使用ssm框架。 准备数据库 数据结构 张三 -user:query user:add user:update user:delete 李四 ---》user:query user:add user:update 王五-----》user:query user:export 搭建ssm的环境 &#xff08;1&#xff09;创建一个maven的web工…

SSM整合

1、ssm整合原理 SSM框架是spring MVC &#xff0c;spring和mybatis框架的整合&#xff0c;是标准的MVC模式&#xff0c;将整个系统划分为表现层&#xff0c;controller层&#xff0c;service层&#xff0c;DAO层四层。 使用spring MVC负责请求的转发和视图管理 spring实现业…

SSM整合,手把手教程,详解思路讲解

前言 一&#xff0c;工程创建 1.新建Maven项目&#xff0c;项目架构增加web支持 2.Maven本地仓库配置 3.集成Tomcat&#xff0c;搭建web环境 二&#xff0c;导入依赖 三&#xff0c;配置文件编写 1.web环境配置文件 2.spring整合环境配置文件 2.1 controller层(spring…

SSM整合完整流程讲解

目录 一、SSM整合说明 1、各个框架担任的角色 2、两个Ioc容器的创建顺序 1&#xff09;SpringMVC中IOC容器的创建时间 2&#xff09;Spring中IOC容器的创建时间 3&#xff09;Spring提供的监听器ContextLoaderListener 二、SSM整合步骤 1、准备工作 1&#xff09;导入…

Unresolved Dependencies

在Android Studio的开发中&#xff0c;在软件中集成了ButterKnife插件&#xff0c;另外需要集成ButterKnife的jar包。因为本地没有现成的&#xff0c;所以在module的build.gradle文件中添加了如下代码&#xff1a; compile com.jakewharton:butterknife:7.0.1 结果报了如下错误…

Pycharm 出现Unresolved reference ‘‘ 错误的解决方法 --- 亲测有效

在用Pycharm写项目的时候的时候碰到一个很无语的问题 路径明明没有问题&#xff0c;运行也没有出错&#xff0c;但就是爆红&#xff0c;逼死强迫症啊。。。 多方查找最后解决了。步骤如下&#xff1a; File–>Settings–>Project Structure–>找到问题目录–>Sou…

PyCharm错误提示- Unresolved reference 的解决

使用PyCharm加载工程时,发生解析错误 原本这个工程是可以通过 python manange.py runserver 方式运行的,说明文件是正常的。关键在于PyCharm环境的问题。 查找了半天,安装一些网上的解决方式,尝试了以下几种方式: 1,修改忽略文件 File –>Settings –>Editor –…

Goland 提示 Unresolved reference 错误解决

之前一直正常的项目&#xff0c;莫名其妙的 database/sql 包下的方法、结构体等等IDE都无法识别&#xff0c;出现一堆Unresolved reference错误提示&#xff0c;但包导入路径可以正确定位&#xff0c;而且项目运行也正常&#xff0c;其他包都正常&#xff0c;另一个项目下同样使…

error LNK2019: unresolved external symbol

error LNK2019: unresolved external symbol&#xff1a;链接器找不到所需要的东西 此时ctrlF7进行编译&#xff0c;没有报错&#xff0c;在这个程序中调用的是Log函数&#xff0c;我们实际上并没有这个函数&#xff0c; 我们有的函数是Logr函数&#xff0c;在编译过程中编译器…