获取文件的父目录

获取文件的父目录

我只想获取文件的父目录的名称。

例如:当我有 时path=/a/b/c/d/file,我只想要d而不是/a/b/c/d(我从 获得dirname $path)作为输出。

有什么复杂的方法可以做到这一点吗?

答案1

听起来你想要的是基本名称目录名:

$ filepath=/a/b/c/d/file
$ parentname="$(basename "$(dirname "$filepath")")"
$ echo "$parentname"
d

答案2

您可以使用 pwd 获取当前工作目录,并使用参数扩展以避免将其分叉到另一个(子)shell中。

echo ${PWD##*/}

编辑:已证实的来源

答案3

我认为这是一个较少资源的解决方案:

 $ filepath=/a/b/c/d/file
 $ echo ${${filepath%/*}##*/}
 d

编辑:抱歉,嵌套扩展在 bash 中无法实现,但在 zsh 中可以实现。Bash 版本:

 $ filepath=/a/b/c/d/file
 $ path=${filepath%/*}
 $ echo ${path##*/}
 d

答案4

dirname并且basename应该用于这项任务。

简短的回答是

dirname /a/b/c/d/file | xargs basename
=> d

第一步,获取dirname路径,产生父文件夹的路径,如下所示。

dirname /a/b/c/d/file
=> /a/b/c/d

然后使用 将父文件夹的路径通过管道传输到另一个命令|。由于basename(和dirname)不在流上运行,而是仅在参数化输入上运行,因此您无法使用 将结果直接通过管道传输到basename| basename但是,这已由 修复xargs,它将管道中的流转换为basename

这使得最终的解决方案成为

dirname /a/b/c/d/file | xargs basename

也可以写成……

echo '/a/b/c/d/file' | xargs dirname | xargs basename

相关内容