Estou recebendo um mv: cannot move, Permission denied
erro, mas antes de afirmar que isso é um engano, veja o que tentei primeiro:
Em primeiro lugar, não tem nada a ver com o modo de arquivo ou diretório:
$ 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% /
Em segundo lugar, tentei com todas as ferramentas de verificação de abertura de arquivos que conheço:
$ jobs | wc
0 0 0
$ lsof | grep .emacs.d | wc
0 0 0
$ fuser .emacs.d | wc
0 0 0
e tentei fechar tudo o que pode ou não estar relacionado ao .emacs.d
diretório, incluindo fechar o código vs que não tem nada a ver com o .emacs.d
diretório.
Divulgação completa: estou usando o Windows Subsystem para Linux, mas acho que não tenho o diretório aberto em nenhuma outra instância do bash. Além disso, como visto na primeira saída, meu diretório inicial está dentro do WSL, não em nenhuma pasta do Windows (ou seja, não deve ter nada a ver com nenhum programa do Windows).
Fiquei sem ideias do que poderia estar me impedindo de renomear esse diretório recém-criado .
Este é um bug na implementação WSL mais antiga que mantém fixando todos os arquivos abertos, mas esquece de rastreá-los quando eles são fechados. Isso foi corrigido nas versões mais recentes do WSL e WSL2.
Como um hack temporário, pode-se
cp to target and rm the old source
Consulte os problemas do GitHub para o projeto WSL
O que funcionou para mim foi definir
remote.WSL.fileWatcher.polling
como verdadeiro de acordo com este documento