当前位置: 首页 > news >正文

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

目录

一、${}

1.${var##*/}

2.${var##*.}

3.${var#*.}

4.${var%/*}

5.${var%%.*}

6.总结

二、basename和dirname

1.basename

2.dirname


 

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

一、${}

1.${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
http://www.lryc.cn/news/301383.html

相关文章:

  • wps使用方法(包括:插入倒三角符号,字母上面加横线,将word中的所有英文设置为time new roman)
  • 备战蓝桥杯---图论之最小生成树
  • 爬虫-华为云空间备忘录导出到docx-selenium控制浏览器行为-python数据处理
  • 网络安全的新防线:主动进攻,预防为先
  • 基于java springboot+mybatis学生学科竞赛管理管理系统设计和实现
  • 秒懂百科,C++如此简单丨第二十一天:栈和队列
  • STM32-开发环境之STM32CubeMX
  • [晓理紫]CCF系列会议截稿时间订阅
  • 重复导航到当前位置引起的。Vue Router 提供了一种机制,阻止重复导航到相同的路由路径。
  • 如何在 Angular 中使用 Flex 布局
  • 通俗的讲解什么是机器学习之损失函数
  • 快速搭建PyTorch环境:Miniconda一步到位
  • 图灵日记之java奇妙历险记--抽象类和接口
  • 批量给元素添加进场动画;获取文本光标位置;项目国际化
  • 解决:docker创建Redis容器成功,但无法启动Redis容器、也无报错提示
  • Jlink+OpenOCD+STM32 Vscode 下载和调试环境搭建
  • 单片机在物联网中的应用
  • 16.Qt 工具栏生成
  • 【Linux内核】从0开始入门Linux Kernel源码
  • SQL Service 2008 的安装与配置
  • Apache POI | Java操作Excel文件
  • vue 学习definproperty方法
  • react 实现路由拦截
  • 数据分析(一) 理解数据
  • 什么是 Flet?
  • 多模态(三)--- BLIP原理与源码解读
  • 掌握高性能SQL的34个秘诀多维度优化与全方位指南
  • 美国纳斯达克大屏怎么投放:投放完成需要多长时间-大舍传媒Dashe Media
  • 【MySQL】多表关系的基本学习
  • Springboot之接入gRPC