很多时候在使用Linux的shell时,我们都需要对文件名或目录名进行处理,通常的操作是由路径中提取出文件名,从路径中提取出目录名,提取文件后缀名等等。例如,从路径/dir1/dir2/file.txt中提取也文件名file.txt,提取出目录/dir1/dir2,提取出文件后缀txt等。

下面介绍两种常用的方法来进行相关的操作。
一、使用${}
1、${var##*/}
该命令的作用是去掉变量var从左边算起的最后一个'/'字符及其左边的内容,返回从左边算起的最后一个'/'(不含该字符)的右边的内容。使用例子及结果如下:
从运行结果可以看到,使用该命令,可以提取出我们需要的文件名file.txt。
若使用时在shell程序文件中,可以使用变量来保存这个结果,再加以利用,如file=${var##*/}
2、${var##*.}
该命令的作用是去掉变量var从左边算起的最后一个'.'字符及其左边的内容,返回从左边算起的最后一个'.'(不含该字符)的右边的内容。使用例子及结果如下:
从运行结果可以看到,使用该命令,可以提取出我们需要的文件后缀。
如果文件的后缀不仅有一个,例如,file.tar.gz,命令${var##*.}仅能提取最后一个后缀,而我想提取tar.gz时该怎么办?那么就要用下面所说的${var#*.}命令了。
3、${var#*.}
该命令的作用是去掉变量var从左边算起的第一个'.'字符及其左边的内容,返回从左边算起第一个'.'(不含该字符)的右边部分的内容。使用例子及结果如下:
从运行结果可以看到,使用该命令,可以提取出文件的多个后缀。
4、${var%/*}
该命令的使用是去掉变量var从右边算起的第一个'/'字符及其右边的内容,返回从右边算起的第一个'/'(不含该字符)的左边的内容。使用例子及结果如下:
从运行的结果可以看到,使用该命令,可以提取出我们需要的文件所在的目录
5、${var%%.*}
该命令的使用是去掉变量var从右边算起的最后一个'.'字符及其右边的内容,返回从右边算起的最后一个'.'(不含该字符)的左边的内容。使用例子及结果如下:
当我们需要建立一个与文件名相同名字(没有后缀)的目录与对应的文件相对应时,就可以使用该命令来进行操作。例如,解压文件的情况就与此类似,我们压缩文件file.zip时,会在与file.zip同级目录下建立一个名为file的目录。
6、${}总结
其实${}并不是专门为提取文件名或目录名的,它的使用是变量的提取和替换等等操作,它可以提取非常多的内容,并不一定是上面五个例子中的'/'或'.'。也就是说,上面的使用方法只是它使用的一个特例。
看到上面的这些命令,可能会让人感到非常难以理解和记忆,其实不然,它们都是有规律的。
#:表示从左边算起第一个
%:表示从右边算起第一个
##:表示从左边算起最后一个
%%:表示从右边算起最后一个
换句话来说,#总是表示左边算起,%总是表示右边算起。
*:表示要删除的内容,对于#和##的情况,它位于指定的字符(例子中的'/'和'.')的左边,表于删除指定字符及其左边的内容;对于%和%%的情况,它位于指定的字符(例子中的'/'和'.')的右边,表示删除指定字符及其右边的内容。这里的'*'的位置不能互换,即不能把*号放在#或##的右边,反之亦然。
例如:${var%%x*}表示找出从右边算起最后一个字符x,并删除字符x及其右边的字符。
看到这里,就可以知道,其实该命令的用途非常广泛,上面只是指针文件名和目录名的命名特性来进行提取的一些特例而已。
二、basename和dirname
${}并不是专门为提取文件名和目录名设计的命令,那么basename和dirname命令就是专门为做这一件事而已准备的了。
1、basename
该命令的作用是从路径中提取出文件名,使用方法为basename NAME [SUFFIX]。
1)从路径中提出出文件名(带后缀),例子如下:
2)从上面命令的用法中可以看到,后缀(SUFFIX)是一个可选项。所以,若只想提取出文件名file,而不带有后缀,还可以在变量的后面加上后缀名,例子如下:
2、dirname
该命令的作用是从路径中提取出目录名,使用方法为 dirname NAME
使用例子如下:
这样就提取出了file.txt文件所在的目录。
注:该命令不仅能提取出普通文件所的目录,它能提取出任何文件所在的目录,例如目录所在的目录,如下:
它提取出了目录dir2所在的目录dir1.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# shell
# 提取文件名
# 获取目录文件名
# 目录下文件名
# shell script获取文件名或者目录名称的方法
# Linux shell 提取文件名和目录名的方法
# shell递归输出文件名和目录名的方法
# 使用Bash Shell获取文件名和目录名的简单方法
# shell 提取文件名和目录名的方法实现
# 算起
# 第一个
# 可以看到
# 不含
# 出了
# 是从
# 建立一个
# 仅能
# 就可以
# 是一个
# 我想
# 这一
# 让人
# 放在
# 还可以
# 是有
# 多个
# 是由
# 两种
# 是专门
相关文章:
已有域名能否直接搭建网站?
如何获取PHP WAP自助建站系统源码?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
C#如何使用XPathNavigator高效查询XML
,有什么在线背英语单词效率比较高的网站?
建站之星后台管理系统如何操作?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
北京的网站制作公司有哪些,哪个视频网站最好?
太平洋网站制作公司,网络用语太平洋是什么意思?
网站企业制作流程,用什么语言做企业网站比较好?
网站图片在线制作软件,怎么在图片上做链接?
建站之星后台密码遗忘如何找回?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
广平建站公司哪家专业可靠?如何选择?
已有域名和空间如何快速搭建网站?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
如何在建站宝盒中设置产品搜索功能?
建站主机功能解析:服务器选择与快速搭建指南
如何用PHP快速搭建高效网站?分步指南
如何选择高效可靠的多用户建站源码资源?
如何在腾讯云服务器快速搭建个人网站?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
如何在搬瓦工VPS快速搭建网站?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
如何在宝塔面板创建新站点?
c# 在高并发场景下,委托和接口调用的性能对比
哈尔滨网站建设策划,哈尔滨电工证查询网站?
高端建站如何打造兼具美学与转化的品牌官网?
焦点电影公司作品,电影焦点结局是什么?
如何在IIS中新建站点并配置端口与IP地址?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
,怎么用自己头像做动态表情包?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
建站之星免费模板:自助建站系统与智能响应式一键生成
企业微网站怎么做,公司网站和公众号有什么区别?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
C#怎么使用委托和事件 C# delegate与event编程方法
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
建站之星代理费用多少?最新价格详情介绍
如何通过虚拟主机空间快速建站?
小型网站建站如何选择虚拟主机?
建站之星伪静态规则如何设置?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
如何通过FTP空间快速搭建安全高效网站?
智能起名网站制作软件有哪些,制作logo的软件?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。