Tengo un enlace simbólico a un directorio importante. Quiero deshacerme de ese enlace simbólico, manteniendo el directorio que hay detrás.
He probado con rm
y me devuelve rm: cannot remove 'foo'
.
He probado con rmdir
y me devuelve rmdir: failed to remove 'foo': Directorio no vacío
.
Luego pasé por 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 el bebé con el agua del baño?
# this works
rm foo
# versus
rm foo/
Básicamente, necesitas decirle que borre un archivo, no que borre 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 en el caso anterior, comprueba tus permisos. Necesitas permiso de escritura en el directorio que lo contiene para eliminar los archivos.
utilice el comando "unlink" y asegúrese de no tener la / al final
$ unlink mySymLink
unlink() borra un nombre del sistema de archivos. Si ese nombre fue el último enlace a un archivo y ningún proceso tiene el archivo abierto, el archivo se borra y el espacio que estaba usando se hace 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 seguirá existiendo hasta que se cierre el último descriptor de archivo que se refiera a él.
Creo que esto puede ser problemático si lo estoy leyendo correctamente.
Si el nombre se refería a un enlace simbólico se elimina el enlace.
Si el nombre se refería a un socket, fifo o dispositivo se elimina el nombre del mismo pero los procesos que tienen el objeto abierto pueden seguir utilizándolo.
Si rm no puede eliminar un enlace simbólico, tal vez tenga que mirar los permisos del directorio que contiene el enlace simbólico. Para eliminar las entradas del directorio, se necesita permiso de escritura en el directorio que lo contiene.