Eu tentei algo normal:
$ mv path1 path2
mv: cannot move
'path1/subfolder/' to 'path2/subfolder': Permission denied
O path2
não existe inicialmente, portanto, isso deve replicar a árvore de pastas de path1
como path2
. A find path1 -ls
mostra que tenho permissão de leitura/gravação para todos os arquivos e pastas em path1
.
Uma inicial diff -qr path1 path2
mostrou que path1/subfolder
não foi movido. No entanto, posso copiar recursivamente:
mkdir path2/subfolder
cp -r path1/subfolder/* path2/subfolder
# Confirm that original subtree and copy are identical
diff -qr path1 path2 # Reveals that the two are identical
Embora tenha contornado o problema, nunca fico satisfeito com um comportamento inexplicável. Existe uma maneira simples de cutucar e cutucar a causa? Quero dizer simples, já que não escrevo scripts Bash. Eu apenas o uso na linha de comando.
Estou usando o Cygwin no Windows 10. A conta não é de administrador. Todos os arquivos e pastas são de propriedade da conta. Assegurei-me de que não houvesse processos zumbis, como aplicativos do Office ou Matlab, que pudessem de alguma forma impedir que uma pasta fosse excluída, embora o problema pudesse ser facilmente acesso de leitura ou outra coisa. Como mostra a solução alternativa, definitivamente não é acesso de gravação à árvore de destino. Eu também posso rm -r path1
, então o problema também não é o acesso de gravação à árvore original.
Dra. Isso significa que não tenho mais path1
, o que torna difícil tentar qualquer sugestão de solução de problemas. Ainda estou aberto a sugestões, no entanto.
A única razão pela qual isso deve acontecer é se ambas as condições a seguir estiverem corretas:
path1
epath2
não estão no mesmo sistema de arquivos. Você pode verificar isso executandodf path1
edf path2
(ou em suas pastas pai) e ver que eles não estão na mesma partição. Se ambos estivessem na mesma partição, omv
comando não tentaria mover recursivamente toda a árvore de diretórios; Seria apenas renomearpath1
parapath2
, sem mover os arquivos e diretórios filhos.path1
não tem permissão de gravação para o usuário ou o grupo. Você disse que tem permissão de leitura/gravação para todos os arquivos e pastas empath1
, mas se quiser moverpath1
para outro sistema de arquivos, precisará de permissão de gravação parapath1
ele mesmo (ou para o pai desubfolder
, sesubfolder
não for um filho direto oupath
).Como você já removeu
path1
, não podemos confirmar isso agora. Você disse que conseguiu acessarrm
a pasta depois de copiá-la, mas pode ter alterado as permissões em algum momento no meio e não posso provar isso. Mas você não teria esse problema.Em geral, provavelmente há algum detalhe que você não nos contou, algo que você pode ter perdido ou não achou relevante, mas, novamente - agora é impossível confirmar isso. Especialmente desde que você usou
cp -r
(que não preserva as permissões, para isso você precisaria-a
ou-p
), então, novamente, não podemos ver quais eram as permissões originais de todos os arquivos e pastas.Este é realmente um comentário, mas o espaço é muito limitado.
Estes não são a mesma coisa. O primeiro criaria um novo diretório dentro do path2 com um nome correspondente ao último nome do diretório no path1, supondo que seja um diretório. O segundo criaria uma cópia recuriva de todos os arquivos em path1/subfilder/ em path2/subfilder.
Teria sido útil se você tivesse fornecido as permissões do sistema de arquivos e a propriedade das coisas que está tentando manipular, uma indicação de qualquer sistema de controle de acesso obrigatório em vigor e exemplos de como você espera que os caminhos fiquem antes e depois.