从Bash脚本中的路径获取文件名
这个问题在这里已经有了答案:
大多数的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
(文件扩展名)。
basename
和dirname
解决方案更方便。 这些是替代命令:
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