从完整路径中获取 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 中的文件名的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 从完整路径中获取文件名?

从包含文件名的路径中获取没有文件名的完整路径

从完整文件路径获取文件夹名称

如何使用Javascript从文件上传中获取完整路径

使用 Swift 获取最后一个目录中的文件名和完整目录路径

如何从文件的完整路径中获取目录?