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


    目录

    一、${}

    1.${var##*/}

    2.${var##*.}

    3.${var#*.}

    4.${var%/*}

    5.${var%%.*}

    6.总结

    二、basename和dirname

    1.basename

    2.dirname


     

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

    一、${}

    1.${var##*/}

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

    2.${var##*.}

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

    3.${var#*.}

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

    4.${var%/*}

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

    5.${var%%.*}

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

    6.总结

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

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

    二、basename和dirname

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

    1.basename

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

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

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

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

    2.dirname

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

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

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

    1. [root@localhost ~]# var=/dir1/dir2/
    2. [root@localhost ~]# dirname $var
    3. /dir1
  • 相关阅读:
    UI设计师(界面设计)面试题
    VWware设置静态ip地址及不同网络模式讲解
    理解C/C++中的链接
    【无标题】
    centos / oracle Linux 常用运维命令讲解
    SpringBoot集成redis+cookie实现分布式单点登录
    【小黑送书—第四期】>>用“价值”的视角来看安全:《构建新型网络形态下的网络空间安全体系》
    史上最强HashMap源码深度解析(3w字图文并茂)
    字节跳动2021首发485道Java岗面试题(含答案)
    复杂网络 | 利用复杂网络预测城市空间流量
  • 原文地址:https://blog.csdn.net/G_D0120/article/details/136111945