我正在尝试使用Unix命令从
/this/is/could/be/any/path/abc.txt
中获取"abc.txt"
。请注意,/this/is/could/be/any/path
是动态的。
有任何想法吗?
在 bash
中:
path=/this/is/could/be/any/path/abc.txt
如果你的路径中有空格,把它用"
包起来。
path="/this/is/could/be/any/path/a b c.txt"
然后要提取路径,使用basename函数
file=$(basename "$path")
或者file=${path##*/}
basename path
返回路径结尾处的文件名。
编辑:
值得注意的是,常见的做法是在命令周围使用反引号,例如 `basename ...`,这样UNIX shell会执行该命令并返回其文本值。
因此,要将basename的结果赋给一个变量,可以使用以下命令:
x=`basename ...path...`
并且$x将是文件名。
basename /this/is/could/be/any/path/abc.txt
。$ dirname $path
dirname any/path/abc.txt
-> any/path
,而他们所要求的是abc.txt
。 - Marcono1234
file=${path##*/}
在ksh
中同样适用;实际上,bash 从 ksh 借鉴了这个特性。任何 Linux 系统上的sh
也可能支持此功能。 - sorpigalfile="$(basename $path)"
或file="${path##*/}"
。 - Keith Thompson