假设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
如果您使用zsh
try: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/..
规范路径。