用cd转到文件的父目录?

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

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

遗憾的是我没有解决方法,所以如果你能帮忙的话会很好!

键入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` 

你不能cd成文件。 这是一个(命令行) 函数 ,它将自动cd到给定的完全限定文件路径的路径中:

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

如果你将“/ ..”附加到文件名,它将带你到正确的目录,例如cd /path/to/file.end/.. 无论如何,它适用于Cygwin。