Evidentemente, o val
resultante da cópia na primeira vez é um link simbólico quebrado . .
-
ls
listsval
porque existe: existe uma entrada de diretório chamadaval
. -
cd val
reclama “Nenhum tal arquivo ou diretório” porqueval
é um link simbólico quebrado.cd
precisa acessar o destino do link, mas o alvo não existe (essa é a definição de um link simbólico quebrado). -
du val
mostra 0 porque um link simbólico não usa nenhum espaço de armazenamento. (O espaço para o nome e metadados não é contado.) -
os.path.exists
retornaFalse
para links simbólicos quebrados. -
rmdir val
reclama com razão queval
não é um diretório, já que é um link simbólico. -
rm val
excluival
normalmente, poisval
é um arquivo que não é um diretório.
Você denuncia:
lrwxrwxrwx 1 user1 dinfk 4 Jun 20 12:05 source_folder -> test
O comando cp -r
copia o link simbólico como um link simbólico. Como source_folder
é um link simbólico cujo destino é test
, isso resulta em level1/val
sendo um link simbólico cujo destino é test
. O alvo de um link simbólico é uma string simples, não “rastreia” nada. Links simbólicos que não iniciam com /
são relativos. level1/val
é um link simbólico cujo destino é test
, portanto, aponta para level1/test
. Como level1/test
não existe, o link simbólico está quebrado.
Mais tarde você viu:
drwxr-sr-x 2 user2 systems 4096 Aug 27 19:02 level1/val
Desta vez, você fez algo diferente e copiou uma árvore de diretórios.
Para copiar o alvo do link em vez do próprio link, você pode usar
cp -r source_folder/ level1/val
A barra à direita diz ao comando cp
para atuar no diretório para o qual o link aponta, em vez de no próprio link simbólico. Se o argumento é um diretório, isso não faz diferença.