Supprimer un lien symbolique vers un répertoire
Question
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 récupéré rm: impossible de supprimer 'foo'
.
J'ai essayé rmdir
et j'ai récupéré rmdir: échec de la suppression de 'foo': répertoire non vide
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?
La solution
# this works
rm foo
# versus
rm foo/
En gros, vous devez lui dire de supprimer un fichier et non de supprimer un répertoire. Je crois que la différence entre rm
et rmdir
existe en raison de différences dans la manière dont la bibliothèque C traite chacune de ces applications.
Quoi qu'il en soit, le premier devrait fonctionner, tandis que le second devrait se plaindre 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.
Autres conseils
utilisez le lien " unlink " commande et assurez-vous que pas 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 référant.
Je pense que cela pourrait poser problème 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 à une 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 doit 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 par l'affirmative.
En supposant qu'il s'agisse en réalité d'un lien symbolique,
$ rm -d symlink
Cela devrait être compris, mais comme cela ne peut pas être activé, le code latent destiné à un autre cas qui n'existe plus mais qui se trouve bien faire ici est ici.
Si rm ne peut pas supprimer un lien symbolique, vous devez peut-être consulter les autorisations sur le répertoire qui contient 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 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. La suppression de toto
ne touchera pas la barre
, sauf si vous le faites de manière récursive.
Sous CentOS, exécutez simplement rm linkname
et le programme vous demandera de "supprimer le lien symbolique?". Tapez Y et Entrée , le lien disparaîtra et le répertoire sera sécurisé.
J'ai eu ce problème avec MinGW (en fait, Git Bash) exécuté 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!