(已解决)Windows Ubuntu 子系统:mv 移动文件夹后消失,但移动文件正常

问题

我当时在 Ubuntu 18.04 的 Windows Subsystem for Linux 中操作。我运行了:

mv venv ../d/

之后,在当前目录和 d 中都找不到 venv 目录。我又在 .bash_history 里仔细核对了这条命令。这里,venv 是一个文件夹,而 d 是指向 Windows D: 盘上 /mnt/d/ubuntu1804/ 的链接。

但是,当我运行:

mv a.txt ../d/

它却可以正常工作,并且文件能在 d 中找到。

当前工作目录是 c,它是指向 /mnt/c/ubuntu1804/ 的链接。

解决方法

这个目录并没有丢失。它实际上被移动到了 C: 盘根目录下,一个名为 d 的目录中。

在 WSL 中,当通过包含符号链接和 .. 的路径移动文件时,可能会出现这种混淆。路径未必会解析到你预期的位置。在执行有破坏性的移动操作之前,可以用下面这些命令检查物理路径:

pwd
pwd -P
ls -ld ../d
readlink -f ../d

更安全的做法是直接使用真实的挂载路径:

mv venv /mnt/d/ubuntu1804/

如果发生了这种情况,可以从 Windows 或 WSL 在意外的目标位置查找被移动的目录,例如:

ls /mnt/c/d

然后再把它移回预期的 D: 盘路径:

mv /mnt/c/d/venv /mnt/d/ubuntu1804/

Leave a Reply