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

相关推荐

  • 如何使用VNC进行远程桌面控制

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

    2024年5月13日
    1.1K00
  • centos7 丢失grub无法启动

    1、使用CentOS7的原版镜像开机从光驱启动 当然你也可以做成启动U盘,从U盘启动 2、选择Troubleshooting->Rescue a CentOS system 3、根据提示先选择1 提示没有找到任何Linux分区,这时会进入shell 4、发现LVM逻辑卷 可以看到/dev/sda2为LVM2_member 5、挂载故障根分区到/mnt/sys…

    2023年7月20日
    99600
  • Linux系统管理本地 Linux 用户和组

    Linux的用户UID 系统中的每个进程(运行程序)都作为一个特定用户运行。每个文件归一个特定用户所有。对文件和目录的访问受到用户的限制。与运行进程相关联的用户可确定该进程可访问的文件和目录。 用户的分类 root用户 用户系统中唯一,权限最大,可以操作任意命令 普通用户 权限较低,只能编辑自己的用户家目录,由root账户创建 虚拟用户 没有登录系统的权限,…

    2022年6月11日
    1.3K00
  • k8s-重启Pod方法

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

    2023年10月9日
    1.3K00
  • 服务器bash进程占用cpu过多疑似中挖矿病毒记录

    发现过程因为我有使用conky的习惯,也就是在桌面上会显示cpu和内存的占用情况,由于服务器不止我一个人使用,最近发现好几次我同学的账户下的bash进程占用特别多,问了他之后,他也说他几次都是没有使用过bash相关服务,之前一直以为可能是某个软件bug之类的,这次想着好好查一下 排查过程 使用top可以看出zhy用户的bash进程cpu和内存占用都非常多,这…

    2024年3月22日
    90300

发表回复

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

在线咨询: QQ交谈

邮件:712342017@qq.com

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

关注微信