【发布时间】:2012-04-24 20:13:29
【问题描述】:
我正在尝试使用 Unix 命令从 /this/is/could/be/any/path/abc.txt 中获取 "abc.txt"。
请注意,/this/is/could/be/any/path 是动态的。
有什么想法吗?
【问题讨论】:
我正在尝试使用 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 function
file=$(basename "$path")
或
file=${path##*/}
【讨论】:
file=${path##*/} 也可以在ksh 中工作;事实上,bash 是从 ksh 那里借用了这个特性。任何 Linux 系统上的任何 sh 都可能支持这一点。
file="$(basename $path)"或file="${path##*/}"
basename path 在路径末尾给出文件名
编辑:
可能值得补充的是,一种常见的模式是在命令周围使用反引号,例如`basename ...`,因此 UNIX shell 将执行命令并返回其文本值。
因此要将 basename 的结果分配给变量,请使用
x=`basename ...path...`
$x 将是文件名。
【讨论】:
你可以使用 dirname 命令
$ dirname $path
【讨论】:
dirname any/path/abc.txt -> any/path,而他们要求的是 abc.txt
您可以使用basename /this/is/could/be/any/path/abc.txt
【讨论】: