我遇到了mv: cannot move, Permission denied
错误,但在声称这是一个骗局之前,请先看看我尝试了什么:
首先,它与文件或目录模式无关:
$ mv -f .emacs.d .emacs.d.old
mv: cannot move '.emacs.d' to '.emacs.d.old': Permission denied
$ ls -Al . | grep emacs
drwx------ 1 me me 4096 2021-06-11 23:04 .emacs.d
ls -ld .
drwxr-xr-x 1 me me 4096 2021-06-12 00:17 .
$ sudo mv -f .emacs.d .emacs.d.old
mv: cannot move '.emacs.d' to '.emacs.d.old': Permission denied
$ mv -f .emacs.d ./.emacs.d.old
mv: cannot move '.emacs.d' to './.emacs.d.old': Permission denied
$ df .
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 307276796 200040828 107235968 66% /
其次,我尝试了所有我知道的文件打开检查工具:
$ jobs | wc
0 0 0
$ lsof | grep .emacs.d | wc
0 0 0
$ fuser .emacs.d | wc
0 0 0
我已经尝试关闭任何可能与目录相关或可能不相关的.emacs.d
内容,包括关闭与目录无关的 vs 代码.emacs.d
。
完全披露:我正在使用适用于 Linux 的 Windows 子系统,但我认为我没有在任何其他 bash 实例中打开该目录。此外,如第一个输出所示,我的主目录位于 WSL 中,而不是在任何 Windows 文件夹下(即,应该与任何 Windows 程序无关)。
我已经没有什么想法可能会阻止我重命名这个新创建的目录。
这是旧版 WSL 实现中的一个错误,它一直固定所有打开的文件,但在它们关闭时忘记跟踪它们。这在 WSL 和 WSL2 的最新版本中已修复。
作为一种临时破解,可以
cp to target and rm the old source
请参阅 WSL 项目的 GitHub 问题
remote.WSL.fileWatcher.polling
根据这个文档,对我有用的是设置为 true