Comment changer un lien symbolique sous OS X?

20

Comment puis-je changer où un lien symbolique pointe, sans supprimer et en créer un nouveau (avec ln -s "/path/to/point/to" "/path/where/symlink/is")?

Lorsque j'ai essayé de le faire sur le lien symbolique «actuel» de Java, Java ne fonctionnait même pas (à partir de la ligne de commande, au moins, dit «erreur de segmentation»), mais il était redevenu normal lorsque j'ai restauré l'ancien lien symbolique «actuel» avec Time. Machine (mais plus tard, j'ai découvert que je devrais utiliser de /Applications/Utilities/Java Preferences.apptoute façon pour changer la version actuelle de Java).

mk12
la source

Réponses:

8
mkdir /path/where/newsymlink
ln -s /path/to/point/to /path/where/newsymlink/is
mv /path/where/newsymlink/is /path/where/symlink/
rmdir /path/where/newsymlink

Cependant, l'utilitaire Java Preferences change plus qu'un simple lien symbolique; vous devez l'utiliser pour vous assurer que la version Java est modifiée.

mark4o
la source
la commande mv ne la renommerait-elle pas simplement?
mk12
.. J'ai essayé, il déplace simplement le nouveau lien symbolique dans le dossier vers lequel pointe l'ancien.
mk12
La première commande crée le lien symbolique qui pointe où vous voulez et la deuxième commande remplace le pointeur existant vers l'ancien emplacement par le pointeur vers le nouvel emplacement. Le mv est atomique donc le lien symbolique existera toujours.
mark4o
.. Mais cela ne fonctionne toujours pas .. il déplace le nouveau pointeur dans le dossier vers lequel pointe l'ancien.
mk12
/path/where/symlink/isest le lien symbolique que vous modifiez. L'utilisation de ces commandes le modifiera pour pointer vers /path/to/point/to. Le dossier vers lequel pointe le lien symbolique d'origine n'est pas du tout touché.
mark4o
29
ln -hfs newlocation existinglink

ou

ln -nfs newlocation existinglink

changera le lien existant pour pointer vers newlocation

(les -n et -h sont identiques en fonctionnement)

De 'man ln'

-h Si le fichier_cible ou le répertoire_cible est un lien symbolique, ne le suivez pas. Ceci est très utile avec l'option -f, pour remplacer un lien symbolique qui peut pointer vers un répertoire.

-f Si le fichier cible existe déjà, dissociez-le pour que le lien puisse se produire. (L'option -f remplace toutes les options -i précédentes.)

-s Creae un lien symbolique

Maxxx
la source
La -nfsversion fonctionne également sur Linux, elle est donc plus portable si quelqu'un s'en soucie.
Cromax
10

Essayer:

unlink /path/to/current/link
ln -s /path/to/target /path/to/symbolic/link
grain
la source
1
Sur mon MacBook Pro fin 2013 avec Mavericks, j'ai dû changer les deux paramètres: ln -s / chemin / vers / symbolique / lien / chemin / vers / cible
Marius Waldal
1

La commande ln ne vous permet pas de modifier les liens, mais uniquement d'en créer de nouveaux.

mk12
la source
0

Avez-vous comparé les autorisations sur les liens et sur les cibles avant et après avoir modifié le lien? Vous devrez peut-être simplement suivre les commandes chown et chmod appropriées pour le faire fonctionner.

Josh
la source
Eh bien, je ne sais même pas comment le changer, alors non. Et je ne sais pas ce que chown et chmod font.
mk12
2
chown change la propriété d'un fichier et / ou d'un répertoire. chmod modifie les autorisations d'un fichier et / ou d'un répertoire. Celles-ci sont standard dans à peu près toutes les plates-formes Unix. Trop de détails pour expliquer chacun ici, donc je recommanderais de googler chacun pour les tutoriels. Vous pouvez également faire "man chown" ou "man chmod" pour lire le manuel de la commande (appuyez sur q pour sortir du manuel).
churnd