Shell 脚本之提取文件名和目录名的方法

一、场景介绍

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

二、实战操作${}
  • ${var##*/}

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

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

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

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

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

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

    #:表示从左边算起第一个
    %:表示从右边算起第一个
    ##:表示从左边算起最后一个
    %%:表示从右边算起最后一个
    
三、实战操作 basenamedirname
  • ${} 并不是专门为提取文件名和目录名设计的命令,那么 basenamedirname 命令就是专门为做这一件事而已准备的了。

  • basename

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

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

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

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

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

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

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

    [root@node100 ~]# var=/dir1/dir2/
    [root@node100 ~]# dirname $var
    /dir1
    [root@node100 ~]# 
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值