获取给定文件的父目录

Tim*_*Tim 11 shell directory filenames variable

假设file存储一个非目录文件的路径名。

我怎样才能得到它的父目录?

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

$ cd $file/..   
cd: ./Tools/build.bat/..: No such file or directory
Run Code Online (Sandbox Code Playgroud)

谢谢。

ilk*_*chu 23

假设

$ file=./Tools/build.bat
Run Code Online (Sandbox Code Playgroud)

使用POSIX 兼容外壳(包括 zsh):

$ echo "${file%/*}"
./Tools
Run Code Online (Sandbox Code Playgroud)

dirname

$ echo "$(dirname -- "$file")"
./Tools
Run Code Online (Sandbox Code Playgroud)

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

  • 好的,我明白这是因为 $file 不是目录 (2认同)
  • 你真的需要“回声”吗? (2认同)

jim*_*mij 9

如果您使用的是zshtry:h修饰符

cd $file:h
Run Code Online (Sandbox Code Playgroud)

您可以将其中的n 个添加到目录结构中的n 个级别。


swi*_*h87 6

这对于命令 dirname 非常简单,只需执行以下操作:

cd "$(dirname -- "$file")"
Run Code Online (Sandbox Code Playgroud)

现在你甚至可以更进一步

file=/home/switch87/.bashrc
cd "$(dirname -- "$file")"
cd "$(dirname -- "$file")"/..
Run Code Online (Sandbox Code Playgroud)

第一张 cd 会让你到 /home/switch87,第二张到 /home