![如何通过 CD 转到已删除目录的父目录?(bash:cd:..:没有这样的文件或目录)](https://linux22.com/image/1455243/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20CD%20%E8%BD%AC%E5%88%B0%E5%B7%B2%E5%88%A0%E9%99%A4%E7%9B%AE%E5%BD%95%E7%9A%84%E7%88%B6%E7%9B%AE%E5%BD%95%EF%BC%9F%EF%BC%88bash%EF%BC%9Acd%EF%BC%9A..%EF%BC%9A%E6%B2%A1%E6%9C%89%E8%BF%99%E6%A0%B7%E7%9A%84%E6%96%87%E4%BB%B6%E6%88%96%E7%9B%AE%E5%BD%95%EF%BC%89.png)
我在 bash 中运行一些简单的命令,其中一个命令删除了我当前的工作目录(没有任何破坏性,我只是使用 git 签出了一个不存在该目录的分支)。
现在我被困在一个已删除的目录中并且 cd 似乎不想让我出去:
$ cd ..
bash: cd: ..: No such file or directory
退出该目录并返回其父目录的最简单方法是什么?
请注意,我所在的目录存储在 NTFS 分区上,这也许可以解释为什么cd ..
会出现错误,而当在 Linux 中从已删除的目录执行 cd 时这种行为似乎不是常态。
(假设重新输入绝对目录路径并将其提供给 cd 在这里可以工作,但是父目录的路径真的很长,而且我很懒。有没有比重新输入其冗长的绝对路径更好的方法来到达父目录?)
答案1
cd 到绝对路径,而不是相对于已删除目录的路径。
例如cd /home/username/
答案2
由于 bash 似乎无法识别相对路径(如..
本例),因此您必须使用绝对路径。例如:
cd ~/path/to/dir
要简单地返回父目录,您可以使用以下命令,这比重新输入所在目录的绝对路径要快得多:
cd "$(dirname "$(pwd)")"
这是一个简单的函数,您可以将其添加到.bashrc
文件中,通过单个命令即可获得此功能(还支持一个参数,您可以使用它来指定向上移动的级别数):
# Allow easily going up multiple directories, even when the current directory
# is a deleted folder on an NTFS share.
function up() {
local dir=`pwd`
local n=${1:-1};
for ((; n>0; n--)) {
dir=`dirname "$dir"`
}
cd "$dir"
}
答案3
制表符
我建议你了解一下 SSH,大多数 shell 允许使用 tab 来简化输入命令。
如果你输入
光盘/小时
然后按 TAB,它将显示可以使用 Tab 键选中的目录列表,或者如果 / 中只有一个以字母 h 开头的目录(例如 home),它将自动填充为
cd /主页
一旦掌握了它,它可以节省你很多时间。
这解决了你的懒惰!
绝对路径
如您所知,您必须 CD 到绝对路径。
一个快速的方法是简单地运行
光盘
在大多数系统中,这将带您进入用户默认目录,通常是 /home/$user
答案4
我不确定你为什么会被卡住
[alexus@wcmisdlin02 ~]$ mkdir 1
[alexus@wcmisdlin02 ~]$ cd 1
[alexus@wcmisdlin02 1]$ rm -rf ../1
[alexus@wcmisdlin02 1]$ cd ..
[alexus@wcmisdlin02 ~]$
...但你总是可以跑cd
或cd ~