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?

Foi útil?

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.

https://linux.die.net/man/2/unlink

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!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top