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

相关推荐

  • 常见三种存储方式DAS、NAS、SAN的架构及比较

    随着主机、磁盘、网络等技术的发展,数据存储的方式和架构也在一直不停改变,本文主要介绍三种主流存储方式DAS、NAS、SAN的架构及比较 DAS即直接连接存储(Direct Attached Storage), NAS即网络接入存储(Network Attached Storage), SAN即存储区域网络(Storage Area Network)。 存储的…

    2024年2月6日
    1.8K00
  • k8s-重启Pod方法

    kubectl 没有 restart pod 这个命令,主要是由于在 k8s 中pod 的管理属于rs 等控制器,并不需要手动维护,但有时更新了yaml文件后,期望破都能够”重启”重新加载yaml文件,比如修改了configmap 的配置文件后,希望重启pod 加载配置,此时就需要 “重启” Pod。而”重启”…

    2023年10月9日
    1.5K00
  • Hollywood – 给你的命令行加点魔法般的动画效果

    作为命令行的重度用户,你是否想让枯燥的终端界面来点生动有趣的元素?Hollywood来了!这是一个无比诙谐、小巧玲珑而又功能强大的动画效果命令行工具。 Hollywood可以为文本添加各种动画效果,让你的输出显示得像电影般生动活泼。它支持多种炫酷动画,并可深度自定义。本文将详细介绍Hollywood的安装使用、酷炫示例和高级技巧,让你快速上手,给终端加点魔力…

    2023年10月13日
    2.1K00
  • Centos7开机进入救援模式的解决方法

    问题描述 Centos启动时提示如下错误信息: 解决办法 1、查询挂载 若提示如下信息: 则使用一下命令

    2022年11月26日
    1.9K00
  • WinServer服务器设置多用户同时远程访问

    1、按Win+R键,在弹出的面板中输入gpedit.msc,进入到“本地组策略编辑器”。  2、依次选择计算机配置→管理模板→Windows组件→远程桌面服务→远程桌面会话主机→连接,双击选择“将远程桌面服务用户限制到单独的远程桌面服务会话” 3、在“将远程桌面服务用户限制到单独的远程桌面服务会话”面板中,选择“已禁用”选项,点击确定。 &nbsp…

    2022年11月14日
    1.4K00

发表回复

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

在线咨询: QQ交谈

邮件:712342017@qq.com

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

关注微信