从Bash脚本中的路径获取文件名

这个问题在这里已经有了答案:

  • 在Bash中提取文件名和扩展名35个答案

  • 大多数的Unix类操作系统有一个basename为一个非常类似的目的可执行文件(和dirname的路径):

    pax> a=/tmp/file.txt
    pax> b=$(basename $a)
    pax> echo $b
    file.txt
    

    不幸的是,只是给你的文件名,包括扩展名,所以你需要找到一种方法来剥去它。

    所以,无论如何你必须这样做,你也可以找到一种方法,可以剥离路径和扩展。

    一种方式来做到这一点(这是一个只有bash解决方案,不需要其他可执行文件):

    pax> a=/tmp/xx/file.tar.gz
    pax> xpath=${a%/*} 
    pax> xbase=${a##*/}
    pax> xfext=${xbase##*.}
    pax> xpref=${xbase%.*}
    pax> echo;echo path=${xpath};echo pref=${xpref};echo ext=${xfext}
    
    path=/tmp/xx
    pref=file.tar
    ext=gz
    

    这个小片段设置了xpath (文件路径), xpref (文件前缀,你特别要求的)和xfext (文件扩展名)。


    basenamedirname解决方案更方便。 这些是替代命令:

    FILE_PATH="/opt/datastores/sda2/test.old.img"
    echo "$FILE_PATH" | sed "s/.*///"
    

    这会返回像basename一样的test.old.img

    这是没有扩展名的盐文件名:

    echo "$FILE_PATH" | sed -r "s/.+/(.+)..+/1/"
    

    它返回test.old

    以下语句提供了像dirname命令一样的完整路径。

    echo "$FILE_PATH" | sed -r "s/(.+)/.+/1/"
    

    它返回/opt/datastores/sda2


    这是从路径获取文件名的简单方法:

    echo "$PATH" | rev | cut -d"/" -f1 | rev
    

    要删除可以使用的扩展名,假设文件名只有一个点(扩展点):

    cut -d"." -f1
    
    链接地址: http://www.djcxy.com/p/57079.html

    上一篇: Get just the filename from a path in a Bash script

    下一篇: Extract file basename without path and extension in bash