使用 cd 进入文件的父目录?

使用 cd 进入文件的父目录?

我正在编写一个 .sh 来为我做一些工作,但现在我必须 cd 到文件 /path/to/file.end 所在的目录。终端不允许

cd /path/to/file.end
bash: cd: /path/to/file.end: Not a directory

遗憾的是我不知道有任何解决方法,所以如果您能帮忙就太好了!

答案1

输入cd $( dirname /path/to/file.end)。这将带您进入/path/to

解释:

  • dirname返回文件的完整路径(不包括文件名,可以使用 获得basename)- 即dirname /etc/apt/apt.conf.d/99update-notifier返回/etc/apt/apt.conf.d
  • 表达式$(anything)被括号中的命令的结果替换。因此cd $( dirname /etc/apt/apt.conf.d/99update-notifier)执行如下cd /etc/apt/apt.conf.d

另一种(但旧的和不鼓励的)表示法是

cd `dirname /path/to/file.end` 

答案2

您无法cd进入文件。这是(命令行)功能它会自动cd进入给定的完全限定文件路径的路径:

function fcd () { [ -f "$1" ] && { cd "$(dirname "$1")"; } || { cd "$1"; } ; pwd; }

答案3

如果您在文件名后附加“/..”,则会将您带到正确的目录,例如cd /path/to/file.end/..。无论如何,它在 Cygwin 上都能正常工作。

答案4

使用:

cd $(dirname $(realpath <path>/myfile.txt))

它展开文件的路径。

相关内容