Wie ändere ich einen Symlink in OS X?

20

Wie ändere ich, wohin ein Symlink verweist, ohne einen neuen zu löschen und zu erstellen (mit ln -s "/path/to/point/to" "/path/where/symlink/is")?

Als ich versuchte, das mit Javas "Current" -Symlink zu machen, funktionierte Java nicht einmal (zumindest von der Befehlszeile aus, sagte "Segmentation Fault"), aber es war wieder normal, als ich den alten "Current" -Symlink mit Time wiederherstellte Maschine (aber später fand ich heraus, dass ich /Applications/Utilities/Java Preferences.appsowieso verwenden sollte, um die aktuelle Java-Version zu ändern).

mk12
quelle

Antworten:

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

Das Dienstprogramm Java Preferences ändert jedoch mehr als nur eine symbolische Verknüpfung. Sie sollten dies verwenden, um sicherzustellen, dass die Java-Version geändert wird.

mark4o
quelle
würde der mv befehl es nicht einfach umbenennen ..?
mk12
.. Ich habe das versucht, es verschiebt einfach den neuen Symlink in den Ordner, auf den der alte zeigt.
mk12
Mit dem ersten Befehl wird der Symlink erstellt, der auf die gewünschte Stelle verweist, und mit dem zweiten Befehl wird der vorhandene Zeiger auf die alte Stelle durch den Zeiger auf die neue Stelle ersetzt. Das MV ist atomar, so dass der Symlink immer existiert.
mark4o
.. Aber es funktioniert immer noch nicht .. es verschiebt den neuen Zeiger in den Ordner, auf den der alte zeigt.
mk12
/path/where/symlink/isist der Symlink, den Sie ändern. Mit diesen Befehlen wird es so geändert, dass es auf zeigt /path/to/point/to. Der Ordner, auf den der ursprüngliche Symlink verweist, wird überhaupt nicht berührt.
mark4o
28
ln -hfs newlocation existinglink

oder

ln -nfs newlocation existinglink

Ändert den vorhandenen Link so, dass er auf newlocation verweist

(die -n und -h sind im Betrieb identisch)

Aus 'man ln'

-h Wenn es sich bei der Zieldatei oder dem Zielverzeichnis um eine symbolische Verknüpfung handelt, folgen Sie dieser nicht. Dies ist am nützlichsten mit der Option -f, um einen Symlink zu ersetzen, der möglicherweise auf ein Verzeichnis verweist.

-f Wenn die Zieldatei bereits vorhanden ist, heben Sie die Verknüpfung auf, damit die Verknüpfung erfolgen kann. (Die Option -f überschreibt alle vorherigen Optionen von -i.)

-s Erstellt eine symbolische Verknüpfung

Maxxx
quelle
Die -nfsVersion funktioniert auch unter Linux, ist also portabler, wenn es jemanden interessiert.
Cromax
10

Versuchen:

unlink /path/to/current/link
ln -s /path/to/target /path/to/symbolic/link
mote
quelle
1
Auf meinem MacBook Pro mit Mavericks Ende 2013 musste ich die beiden Parameter wechseln: ln -s / path / to / symbolic / link / path / to / target
Marius Waldal
1

Mit dem Befehl ln können Sie keine Links ändern, sondern nur neue erstellen.

mk12
quelle
0

Haben Sie die Berechtigungen für die Links und für die Ziele verglichen, bevor und nachdem Sie den Link geändert haben? Möglicherweise müssen Sie nur die entsprechenden chown- und chmod-Befehle eingeben, damit es funktioniert.

Josh
quelle
Nun, ich weiß nicht einmal, wie ich es ändern soll, also nein. Und ich weiß nicht, was Chown und Chmod tun.
6.
2
chown ändert den Besitz einer Datei und / oder eines Verzeichnisses. chmod ändert die Berechtigungen einer Datei und / oder eines Verzeichnisses. Diese sind in nahezu jeder Unix-Plattform Standard. Zu viele Details, um sie hier zu erklären, daher würde ich empfehlen, sie für Tutorials zu googeln. Sie können auch "man chown" oder "man chmod" ausführen, um das aktuelle Handbuch des Befehls zu lesen (drücken Sie q, um das Handbuch zu verlassen).
Churnd