Pregunta

Tengo un enlace simbólico a un directorio importante. Quiero deshacerme de ese enlace simbólico, manteniendo el directorio detrás de él.

Intenté rm y volví a rm: no se puede eliminar 'foo' .
Intenté rmdir y volví a rmdir: no se pudo eliminar 'foo': el directorio no está vacío
Luego progresé a través de rm -f , rm -rf y sudo rm -rf

Luego fui a buscar mis copias de seguridad.

¿Hay alguna manera de deshacerse del enlace simbólico sin tirar al bebé con el agua del baño?

¿Fue útil?

Solución

# this works
rm foo
# versus
rm foo/

Básicamente, debe indicarle que elimine un archivo, no que elimine un directorio. Creo que la diferencia entre rm y rmdir existe debido a las diferencias en la forma en que la biblioteca C trata a cada uno.

En cualquier caso, el primero debería funcionar, mientras que el segundo debería quejarse de que foo es un directorio.

Si no funciona como se indica arriba, verifique sus permisos. Necesita permiso de escritura en el directorio que contiene para eliminar archivos.

Otros consejos

use el " desvincular " comando y asegúrese de que no tenga el / al final

$ unlink mySymLink
  

unlink () elimina un nombre del sistema de archivos. Si ese nombre fue el último enlace a un archivo y no hay procesos en los que el archivo esté abierto, el archivo se elimina y el espacio que estaba usando está disponible para su reutilización.   Si el nombre era el último enlace a un archivo pero algún proceso todavía tiene el archivo abierto, el archivo permanecerá en existencia hasta que se cierre el último descriptor de archivo que hace referencia a él.

Creo que esto puede ser problemático si lo estoy leyendo correctamente.

  

Si el nombre hace referencia a un enlace simbólico, el enlace se elimina.

     

Si el nombre se refiere a un socket, fifo o dispositivo, el nombre se elimina pero los procesos que tienen el objeto abierto pueden continuar usándolo.

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

rm debería eliminar el enlace 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 pero no incluya una barra diagonal al final (no use: rm symlinkname / ). Luego se le preguntará si desea eliminar el enlace simbólico, y para responder que sí.

Suponiendo que en realidad es un enlace simbólico,

$ rm -d symlink

Debería resolverlo, pero como no puede, habilitamos el código latente destinado a otro caso que ya no existe pero que hace lo correcto aquí.

Si rm no puede eliminar un enlace simbólico, tal vez necesite mirar los permisos en el directorio que contiene el enlace simbólico. Para eliminar entradas de directorio, necesita permiso de escritura en el directorio que lo contiene.

Suponiendo que su configuración es algo como: ln -s / mnt / bar ~ / foo , entonces debería poder hacer un rm foo sin ningún problema. Si no puede, asegúrese de ser el propietario del foo y tener permiso para escribir / ejecutar el archivo. La eliminación de foo no tocará bar , a menos que lo haga de forma recursiva.

En CentOS, simplemente ejecute rm linkname y le pedirá que elimine el enlace simbólico. Escriba Y y Enter , el enlace desaparecerá y el directorio estará seguro.

Tuve este problema con MinGW (en realidad Git Bash) ejecutándose en un servidor de Windows. Ninguna de las sugerencias anteriores parecía funcionar. Al final, hice una copia del directorio en caso de que luego eliminé el enlace flexible en el Explorador de Windows y luego eliminé el elemento en la Papelera de reciclaje. Hizo ruidos como si estuviera borrando los archivos pero no lo hizo. ¡Sin embargo, haga una copia de seguridad!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top