Como remover um link simbólico para um diretório?

100

Eu fiz um link simbólico com o seguinte comando:

ln -s ../test5

Quero removê-lo agora, mas meu rm falha:

$ rm -Rf test5/
rm: cannot remove `test5/': Not a directory
$ rm test5/
rm: cannot remove directory `test5/': Is a directory
$ rmdir test5/
rmdir: test5/: Not a directory
$rm -r test5/
rm: cannot remove `test5/': Not a directory

$ls -l
 0 lrwxrwxrwx  1 peter peter    8 Jul 20 15:30 test5 -> ../test5/

Como posso remover meu link simbólico? (Ubuntu 8.10, bash)

Peter Smit
fonte
4
DICA: rm -r link/exclui o conteúdo do destino
Gayan Weerakutti

Respostas:

121

Remova a barra à direita:

Com prompt:

$ rm test5

Sem aviso:

$ rm -f test5

Swanand
fonte
Diz permission denied.
1.21 gigawatts
1
Sem barra final. Então test5/está incorreto.
Pylover
20

Tente rm test5
(sem a barra de treinamento).

A barra indica que 'test5' é um direactory enquanto que na verdade é um arquivo que liga para um diretório.

peles
fonte
14

Você pode executar a remoção da barra à direita:

$ rm test5

Isso removerá o arquivo (ou seja, o link simbólico).

Como alternativa, você pode usar o link:

$ unlink test5

Novamente, você deve omitir a barra final, pois está tentando desvincular o link simbólico e não o diretório.

Callum
fonte
0

Às vezes, se você usar o preenchimento automático para nomear o link que deseja excluir, poderá não ver uma barra final, mas está "meio lá" e essa barra invisível ainda gera o erro de exclusão ao tentar remover esse link.

Portanto, nesse caso, digite caractere por caractere no link a ser excluído como "test5", como por exemplo. rm test5.

user872812
fonte
1
Nunca ouvi falar de barra invisível. Que shell faz isso?
Kamil Maciorowski
Eu acho que é possivelmente uma referência ao personagem sendo ocultado por linewrap + cursor?
bertieb
0

O problema no OP é o final /, então test5/gera um erro, mas test5funciona.

Prefiro usar unlinkdo que rmcomo minha intenção é mais clara e não há chance de remover por engano o diretório real em vez do link. Certifique-se de que não haja nenhum rastro /após o nome do diretório, por exemplo:

unlink test5
isapir
fonte
-1

Eu me sinto tola perguntando, mas você já tentou rm -r? Por ser um link simbólico, não deve excluir o alvo.

Edit: Apenas tentei, está correto

Edit 2: rmdir diz que em sua primeira linha da página de manual ele exclui diretórios vazios. Eu pensaria que, por ser um link, o bit do diretório foi verificado nas propriedades do arquivo, mas porque o rmdir não suspeita que seja o caso, ele gera erros. Basta usar rm -r

bobby
fonte
2
Isso vai me pedir para excluir os arquivos no diretório, isso não é o que eu quero, eu quero excluir apenas o link
Peter Smit
A pergunta era porque interativo foi definido no meu .profile. Adicionada a resposta para rm -r. Ainda não funciona.
22413 Peter Smit
Você deixou o arrasto '/' é por isso que falhou
Bobby