获取给定文件的父目录

获取给定文件的父目录

假设file存储非 dir 文件的路径名。

如何获取其父目录?

为什么以下通过附加/..其值的方式不起作用

$ cd $file/..   
cd: ./Tools/build.bat/..: No such file or directory

谢谢。

答案1

假设

$ file=./Tools/build.bat

POSIX 兼容 shell(包括 zsh):

$ echo "${file%/*}"
./Tools

dirname

$ echo "$(dirname -- "$file")"
./Tools

(至少 GNUdirname接受选项,因此--在路径以破折号开头的情况下是必需的。)

答案2

如果您使用zshtry:h修饰符

cd $file:h

你可以加n其中要走的n目录结构升级。

答案3

使用命令 dirname 非常简单,只需执行以下操作:

cd "$(dirname -- "$file")"

现在你甚至可以更进一步

file=/home/switch87/.bashrc
cd "$(dirname -- "$file")"
cd "$(dirname -- "$file")"/..

第一个 cd 将使您进入 /home/switch87,第二个进入 /home

答案4

readlink我更喜欢使用和的组合dirname

parent=$(readlink -f "$(dirname "$file")")
cd $parent

dirname从路径中删除文件名并readlink -f变成$path/..规范路径。

相关内容