Remover um link simbólico para um diretório
Pergunta
Eu tenho um link simbólico para um diretório importante. Eu quero me livrar desse link simbólico, mantendo o diretório por trás dele.
Eu tentei rm
e obter rm: cannot remove 'foo'
volta.
Tentei rmdir
e voltou rmdir: failed to remove 'foo': Directory not empty
Eu, então, progrediu através rm -f
, rm -rf
e sudo rm -rf
Em seguida, fui para encontrar meus back-ups.
Existe uma maneira de se livrar da ligação simbólica com a deitar fora o bebé com a água do banho?
Solução
# this works
rm foo
# versus
rm foo/
Basicamente, você precisa dizer a ele para excluir um arquivo, não excluir um diretório. Eu acredito que a diferença entre rm
e rmdir
existe por causa de diferenças na forma como os deleites da biblioteca C cada.
De qualquer forma, o primeiro deve funcionar, enquanto o segundo deve queixar-foo ser um diretório.
Se ele não funciona como acima, em seguida, verifique as suas permissões. Você precisa de permissão de escrita para o diretório contendo para remover arquivos.
Outras dicas
usar o comando "unlink" e certifique-se não para ter o / no final
$ unlink mySymLink
unlink () apaga o nome do sistema de arquivos. Se esse nome foi o último link para um arquivo e não processa o arquivo aberto, o arquivo é excluído eo espaço dele é disponibilizado para reutilização. Se o nome foi o último link para um arquivo mas qualquer processo tem o arquivo abrir o arquivo continuará a existir até o último descritor de arquivo referindo-se a ele é fechado.
Eu acho que isso pode ser problemático se eu estou lendo corretamente.
Se o nome se refere a um link simbólico no link é removido.
Se o nome se refere a uma tomada, FIFO ou dispositivo o nome para que seja removido, mas os processos que têm como objectivo aberto pode continuar a usá-lo.
rm deve remover o link simbólico.
skrall@skrall-desktop:~$ mkdir bar
skrall@skrall-desktop:~$ ln -s bar foo
skrall@skrall-desktop:~$ ls -l foo
lrwxrwxrwx 1 skrall skrall 3 2008-10-16 16:22 foo -> bar
skrall@skrall-desktop:~$ rm foo
skrall@skrall-desktop:~$ ls -l foo
ls: cannot access foo: No such file or directory
skrall@skrall-desktop:~$ ls -l bar
total 0
skrall@skrall-desktop:~$
Use rm symlinkname
mas não incluir uma barra no final (não use: rm symlinkname/
). Em seguida, será perguntado se você deseja remover o link simbólico, y
para responder sim.
Assumindo que realmente é um link simbólico,
$ rm -d symlink
Deve descobrir isso, mas desde que não podemos permitir que o código latente que foi destinado para outro caso que não existe mais, mas passa a fazer a coisa certa aqui.
Se rm não pode remover um link simbólico, talvez você precisa olhar para as permissões no diretório que contém o link simbólico. Para remover entradas de diretório, você precisa de permissão de escrita no diretório que contém.
Assumindo a sua configuração é algo como: ln -s /mnt/bar ~/foo
, então você deve ser capaz de fazer um rm foo
sem nenhum problema. Se não for possível, certifique-se que você é o proprietário do foo
e tem permissão para escrever / executar o arquivo. Removendo foo
não vai tocar bar
, a menos que você fazê-lo de forma recursiva.
No CentOS, basta executar rm linkname
e ele vai pedir para "remover link simbólico?". Digite Y e Enter , o link será ido eo diretório ser seguro.
Eu tive esse problema com MinGW (na verdade Git Bash) rodando em um Windows Server. Nenhuma das sugestões acima parecia trabalho. No final, um feito uma cópia do diretório em caso seguida, eliminado o link suave no Windows Explorer, então, excluído o item na Lixeira. Ele fazia ruídos como se estivesse apagando os arquivos, mas não o fez. Faça um backup embora!