Wie kann man einen Symlink in OS X ändern?

24089
mk12

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

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

12

5 Antworten auf die Frage

15
Maxxx
ln -hfs newlocation existinglink 

oder

ln -nfs newlocation existinglink 

ändert den vorhandenen Link, um auf Neuzuordnung zu verweisen

(Die -n und -h sind in der Operation identisch)

Von 'man ln'

-h Wenn die Zieldatei oder das Zielverzeichnis eine symbolische Verknüpfung ist, folgen Sie ihr nicht. Dies ist am nützlichsten mit der Option -f, um einen Symlink zu ersetzen, der auf ein Verzeichnis verweist.

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

-s Creae einen symbolischen Link

10
mote

Versuchen:

unlink /path/to/current/link ln -s /path/to/target /path/to/symbolic/link 
Bei meinem späten 2013er MacBook Pro mit Mavericks musste ich die beiden Parameter umschalten: ln -s / path / in / symbolic / link / path / in / target Marius Waldal vor 10 Jahren 1
6
mark4o
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 Java Preferences-Dienstprogramm ändert jedoch mehr als nur einen symbolischen Link. Sie sollten dies verwenden, um sicherzustellen, dass die Java-Version geändert wird.

würde der Befehl mv es nicht einfach umbenennen ..? mk12 vor 14 Jahren 0
Ich habe es ausprobiert, der neue Symlink wird einfach in den Ordner verschoben, auf den der alte verweist. mk12 vor 14 Jahren 0
Mit dem ersten Befehl wird der Symlink an die gewünschte Stelle gesetzt, 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, daher existiert der Symlink immer. mark4o vor 14 Jahren 0
Aber es funktioniert immer noch nicht .. es bewegt den neuen Zeiger in den Ordner, auf den der alte Zeiger zeigt. mk12 vor 14 Jahren 0
`/ path / where / symlink / is` ist der Symlink, den Sie ändern. Mit diesen Befehlen wird es auf `/ path / to / point / to` zeigen. Der Ordner, auf den der ursprüngliche Symlink verweist, wird überhaupt nicht berührt. mark4o vor 14 Jahren 0
Durch den Befehl mv wird der alte Befehl nicht durch den neuen ersetzt, sondern der neue wird in den alten verschoben (in den Ordner, auf den er verweist). Ich habe es mehrere Male versucht. mk12 vor 14 Jahren 0
@ Mk12: Du solltest dem neuen den gleichen Namen geben wie den alten. Es sollte es also überschreiben. Sasha Chedygov vor 14 Jahren 0
Tat ich, aber es tut nicht. Es verschiebt es in das Verzeichnis, auf das es verweist. mk12 vor 14 Jahren 0
@ Mk12: Sorry, du hast recht. Ich habe meine Antwort korrigiert, um damit umzugehen, obwohl es jetzt 4 statt 2 Befehle ist ... :-( mark4o vor 14 Jahren 0
Diese Anweisungen sind sehr schwer zu befolgen. mk12 vor 14 Jahren 0
Es wird nur ein neuer Link über den alten verschoben. Das mkdir / rmdir ist nur da, weil "mv x y" x in y / x umbenennt und nicht nur y, wenn y ein Verzeichnis oder ein Link zu einem Verzeichnis ist. Wenn mv eine Option zur Unterdrückung dieses Verhaltens hätte, wäre dies einfacher. mark4o vor 14 Jahren 0
1
mk12

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

0
Josh

Haben Sie die Berechtigungen für die Links und für die Ziele vor und nach dem Ändern des Links verglichen? Möglicherweise müssen Sie nur die entsprechenden Befehle chown und chmod nachverfolgen, damit das System funktioniert.

Nun, ich weiß nicht mal, wie ich das ändern soll. Und ich weiß nicht, was chown und chmod tun. mk12 vor 14 Jahren 0
chown ändert den Besitz einer Datei und / oder eines Verzeichnisses. chmod ändert die Berechtigungen einer Datei und / oder eines Verzeichnisses. Dies ist in fast jeder Unix-Plattform Standard. Zu viel Detail, um sie hier zu erläutern, daher würde ich empfehlen, 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 vor 14 Jahren 2