Shell脚本——提取目录名和文件名

在许多场景下,我们都需要对文件名称或者文件所在的目录进行操作,已达到我们业务目的。通常的操作是由路径中提取文件名,从路径中提取目录名,提取文件后缀等等一系列的操作。

一、${}

1.${var##*/}


该命令的作用是去掉变量var从左边算起的最后一个'/'字符及其左边的内容,返回从左边算起的最后一个'/'(不含该字符)的右边的内容。使用例子及结果如下:  
首先定义变量var一个值
[root@localhost ~]# var=/dir1/dir2/file.txt              
[root@localhost ~]# echo ${var##*/}
file.txt

2.${var##*.}


该命令的作用是去掉变量var从左边算起的最后一个'.'字符及其左边的内容,返回从左边算起的最后一个'.'(不含该字符)的右边的内容。使用例子及结果如下:
[root@localhost ~]# var=/dir1/dir2/file.txt
[root@localhost ~]# echo ${var##*.}
txt

3.${var#*.}

该命令的作用是去掉变量var从左边算起的第一个'.'字符及其左边的内容,返回从左边算起第一个'.'(不含该字符)的右边部分的内容。使用例子及结果如下:
[root@localhost ~]# var=/dir1/dir2/file.tar.gz
[root@localhost ~]# echo ${var#*.}
tar.gz

4.${var%/*}

该命令的使用是去掉变量var从右边算起的第一个'/'字符及其右边的内容,返回从右边算起的第一个'/'(不含该字符)的左边的内容。使用例子及结果如下:
[root@localhost ~]# var=/dir1/dir2/file.txt
[root@localhost ~]# echo ${var%/*}
/dir1/dir2

5.${var%%.*}


该命令的使用是去掉变量var从右边算起的最后一个'.'字符及其右边的内容,返回从右边算起的最后一个'.'(不含该字符)的左边的内容。使用例子及结果如下:
[root@localhost ~]# var=/dir1/dir2/file.txt
[root@localhost ~]# echo ${var%%.*}
/dir1/dir2/file

6.总结

其实 ${} 并不是专门为提取文件名或目录名的,它的使用是变量的提取和替换等等操作,它可以提取非常多的内容,并不一定是上面五个例子中的 / 或 .。也就是说,上面的使用方法只是它使用的一个特例。

符号定义
#从左开始第一个
%从右边开始第一个
##从左边开始最后一个
%%从右边开始最后一个

二、basename和dirname
${}并不是专门为提取文件名和目录名设计的命令,那么basename和dirname命令就是专门为做这一件事而已准备的了。

1.basename
该命令的作用是从路径中提取出文件名,使用方法为 basename NAME [SUFFIX]

[root@localhost ~]# var=/dir1/dir2/file.txt
[root@localhost ~]# echo $(basename $var)
file.txt

从上面命令的用法中可以看到,后(SUFFIX)是一个可选项。所以,若只想提取出文件名file,而不带有后缀,还可以在变量的后面加上后缀名,例子如下:

[root@localhost ~]# var=/dir1/dir2/file.txt
[root@localhost ~]# echo $(basename $var .txt)
file

2.dirname

该命令的作用是从路径中提取出目录名,使用方法为 dirname NAME 使用例子如下:

[root@localhost ~]# var=/dir1/dir2/file.txt
[root@localhost ~]# dirname $var
/dir1/dir2

注意:该命令不仅能提取出普通文件所的目录,它能提取出任何文件所在的目录,例如目录所在的目录,如下:

[root@localhost ~]# var=/dir1/dir2/
[root@localhost ~]# dirname $var
/dir1

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/11277

(0)
凯影的头像凯影
上一篇 2024年2月6日 下午3:03
下一篇 2024年2月19日 上午11:30

相关推荐

  • 此站点的连接不安全,使用不受支持的协议。ERR_SSL_VERSION_OR_CIPHER_MISMATCH(不支持的协议 客户端和服务器不支持常用的 SSL 协议版本或密码套件。)

    如图所示报错 一、解决方法一1.Microsoft Edge浏览器→点击右上角的三个点→选择设置 2.选择外观→打开Internet Explorer 模式(IE 模式)按钮 3.打开Microsoft Edge浏览器→输入自己要访问的IP地址或者是链接→回车访问→点击右上角的IE图标(在 Internet Explorer 模式下的重新加载选项卡) 4.访…

    2023年7月25日
    4.2K00
  • 如何使用VNC进行远程桌面控制

    VNC是一款很实用的可以实现远程桌面控制的小工具,我遇到的有两种情况比较常见,一是有时候时候可能你会外出或离开自己办公室(但可以访问到办公司的网络),而很多资料都保存在办公室的台式机上,这时如果突然有问题需要用到那些资料,你又不方便立刻回去,这时你就可以考虑借助笔记本电脑通过VNC远程控制自己的台式机桌面进行操作,处理一些紧急问题;还有一种情况就是你外出或离…

    2024年5月13日
    1.7K00
  • 使用netcat检测UDP端口是否开启

    一般我们使用tcping或者telnet检测目标IP的的TCP端口是否开放。但这两种工具对UDP端口无效。 Netcat是什么 NC(netcat)被称为网络工具中的瑞士军刀,体积小巧,但功能强大。 Nc主要功能 Nc可以在两台设备上面相互交互,即侦听模式/传输模式 可以使用的参数 其实常用的就几个参数-n,-v,-l,-p,-q

    2022年12月6日
    1.7K00
  • Nginx升级版本

    一:宝塔Nginx升级 在宝塔界面点击软件管理->运行环境->Nginx的设置 选择切换版本->选择想要升级的版本,点击切换等待安装成功 二:Linux下升级nginx版本(源码包方式) 方式:使用源码包的方式 老版本:nginx/1.13.0 新版本:nginx/1.22.0 一:下载源码包 wget http://nginx.org/d…

    2022年8月2日
    2.0K00
  • Linux如何调整Swap空间大小

    查看当前Swap文件位置以及大小 要查看当前正在使用的swap文件或分区的位置,您可以使用swapon命令。 执行以下命令: 这将显示所有活动的swap空间,包括其类型(例如文件或分区)、大小、使用情况和位置。 如果您只对文件路径或分区路径感兴趣,您可以通过/proc/swaps文件查看相同的信息: 这将列出系统上所有的swap空间,包括它们的位置。 设置一…

    2023年11月6日
    1.5K00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信