![使用 cd 进入文件的父目录?](https://linux22.com/image/838822/%E4%BD%BF%E7%94%A8%20cd%20%E8%BF%9B%E5%85%A5%E6%96%87%E4%BB%B6%E7%9A%84%E7%88%B6%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
我正在编写一个 .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))
它展开文件的路径。