J'ai un lien symbolique vers un répertoire important. Je veux me débarrasser de ce lien symbolique tout en gardant le répertoire derrière lui.
J'ai essayé rm
et obtenir rm: cannot remove 'foo'
.
J'ai essayé rmdir
et je suis revenu rmdir: failed to remove 'foo': Directory not empty
J'ai ensuite progressé dans rm -f
, rm -rf
et Sudo rm -rf
Ensuite, je suis allé chercher mes sauvegardes.
Y a-t-il un moyen de se débarrasser du lien symbolique sans jeter le bébé avec l'eau du bain?
# this works
rm foo
# versus
rm foo/
En gros, vous devez lui dire de supprimer un fichier, pas de supprimer un répertoire. Je crois que la différence entre rm
et rmdir
existe en raison des différences dans la façon dont la bibliothèque C traite chacune d'elles.
Quoi qu'il en soit, le premier devrait fonctionner, tandis que le second devrait se plaindre du fait que foo soit un répertoire.
Si cela ne fonctionne pas comme ci-dessus, vérifiez vos autorisations. Vous devez disposer d'une autorisation en écriture sur le répertoire contenant pour supprimer des fichiers.
utilisez la commande "unlink" et assurez-vous pas d'avoir le/à la fin
$ unlink mySymLink
unlink () supprime un nom du système de fichiers. Si ce nom était le dernier lien vers un fichier et qu'aucun processus ne l'a ouvert, le fichier est supprimé et l'espace utilisé était mis à disposition pour être réutilisé. Si le nom était le dernier lien vers un fichier mais que le processus reste ouvert pour tous les processus, le fichier restera en place jusqu'à la fermeture du dernier descripteur de fichier le concernant.
Je pense que cela peut être problématique si je le lis correctement.
Si le nom fait référence à un lien symbolique, le lien est supprimé.
Si le nom fait référence à un socket, un fifo ou un périphérique, son nom est supprimé, mais les processus dont l'objet est ouvert peuvent continuer à l'utiliser.
rm devrait supprimer le lien symbolique.
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:~$
Utilisez rm symlinkname
mais n'incluez pas de barre oblique à la fin (n'utilisez pas: rm symlinkname/
). On vous demandera ensuite si vous souhaitez supprimer le lien symbolique, y
, pour répondre oui.
En supposant qu'il s'agisse d'un lien symbolique,
$ rm -d symlink
Cela devrait se comprendre, mais comme cela ne peut pas être activé, le code latent qui était destiné à un autre cas qui n'existe plus mais qui arrive à faire la bonne chose ici.
Si rm ne peut pas supprimer un lien symbolique, vous devrez peut-être consulter les autorisations du répertoire contenant le lien symbolique. Pour supprimer des entrées de répertoire, vous devez disposer d'une autorisation d'écriture sur le répertoire contenant.
En supposant que votre configuration ressemble à quelque chose comme: ln -s /mnt/bar ~/foo
, vous devriez alors pouvoir faire un rm foo
sans problème. Si vous ne le pouvez pas, assurez-vous d’être le propriétaire du foo
et d’avoir le droit d’écrire/exécuter le fichier. Supprimer foo
ne touchera pas bar
, sauf si vous le faites de manière récursive.
J'ai eu ce problème avec MinGW (en fait, Git Bash) s'exécutant sur un serveur Windows. Aucune des suggestions ci-dessus n'a semblé fonctionner. En fin de compte, une copie du répertoire a été créée au cas où vous avez ensuite supprimé le lien symbolique dans l'Explorateur Windows, puis supprimé l'élément dans la corbeille. Cela faisait des bruits de suppression de fichiers, mais pas du tout. Faites une sauvegarde cependant!
Sur CentOS, lancez simplement rm linkname
et il vous demandera de "supprimer le lien symbolique?". Type Y et Enter, le lien aura disparu et le répertoire sera en sécurité.