从完整路径中获取 Unix 中的文件名
Posted
技术标签:
【中文标题】从完整路径中获取 Unix 中的文件名【英文标题】:Grab the filename in Unix out of full path 【发布时间】:2012-04-24 20:13:29 【问题描述】:我正在尝试使用 Unix 命令从 /this/is/could/be/any/path/abc.txt
中获取 "abc.txt"
。
请注意,/this/is/could/be/any/path
是动态的。
有什么想法吗?
【问题讨论】:
【参考方案1】:在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##*/"
你的回答很好,但是如果设计者希望脚本使用有空格的路径,第一个答案需要在 $path 周围加上引号,所以:file=$basename "$path" 。我已经编辑了答案来解决这个问题,但我认为它需要你的批准。 @Keith Thompson,file="$basename $path" 不起作用,引号需要在 $path 上,否则 basename 函数将无法正常工作。
这个真的很有用,basename也可以去掉文件扩展名。【参考方案2】:
basename path
在路径末尾给出文件名
编辑:
可能值得补充的是,一种常见的模式是在命令周围使用反引号,例如`basename ...`,因此 UNIX shell 将执行命令并返回其文本值。
因此要将 basename 的结果分配给变量,请使用
x=`basename ...path...`
$x 将是文件名。
【讨论】:
我已经尝试过了,basename 似乎在名称中有空格的路径上掉了下来。【参考方案3】:你可以使用 dirname 命令
$ dirname $path
【讨论】:
这与 OP 要求的相反:dirname any/path/abc.txt
-> any/path
,而他们要求的是 abc.txt
【参考方案4】:
您可以使用basename /this/is/could/be/any/path/abc.txt
【讨论】:
密切关注时代...... 2012 年 4 月 12 日 13:15 与 2012 年 4 月 12 日 13:16 回答以上是关于从完整路径中获取 Unix 中的文件名的主要内容,如果未能解决你的问题,请参考以下文章