Evidentemente, o val resultante da cópia na primeira vez é um link simbólico quebrado . .
-
lslistsvalporque existe: existe uma entrada de diretório chamadaval. -
cd valreclama “Nenhum tal arquivo ou diretório” porquevalé um link simbólico quebrado.cdprecisa acessar o destino do link, mas o alvo não existe (essa é a definição de um link simbólico quebrado). -
du valmostra 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.existsretornaFalsepara links simbólicos quebrados. -
rmdir valreclama com razão quevalnão é um diretório, já que é um link simbólico. -
rm valexcluivalnormalmente, 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.