Jak zmienić dowiązanie symboliczne w OS X?

21

Jak zmienić miejsce, do którego prowadzi dowiązanie symboliczne, bez usuwania i tworzenia nowego (z ln -s "/path/to/point/to" "/path/where/symlink/is")?

Kiedy próbowałem zrobić to z dowiązaniem symbolicznym „Current” Javy, Java nawet nie działała (przynajmniej z wiersza poleceń powiedział „Błąd segmentacji”), ale wróciłem do normalnego stanu po przywróceniu starego dowiązania symbolicznego „Current” z czasem Maszyna (ale później dowiedziałem się, że i /Applications/Utilities/Java Preferences.apptak powinienem użyć, aby zmienić obecną wersję Java).

mk12
źródło

Odpowiedzi:

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

Jednak narzędzie Preferencje Java zmienia więcej niż tylko łącze symboliczne; powinieneś tego użyć, aby upewnić się, że wersja Java została zmieniona.

mark4o
źródło
czy komenda mv po prostu nie zmieni nazwy?
mk12
.. Próbowałem tego, po prostu przenosi nowe dowiązanie symboliczne do folderu, na który wskazuje stary.
mk12
Pierwsze polecenie tworzy dowiązanie symboliczne wskazujące, gdzie chcesz, a drugie polecenie zastępuje istniejący wskaźnik do starego miejsca wskaźnikiem do nowego miejsca. Mv jest atomowy, więc dowiązanie symboliczne zawsze będzie istnieć.
mark4o
.. Ale nadal nie działa .. przenosi nowy wskaźnik do folderu, na który wskazuje stary.
mk12
/path/where/symlink/isto dowiązanie symboliczne, które zmieniasz. Użycie tych poleceń spowoduje zmianę na wskazanie /path/to/point/to. Folder wskazywany przez oryginalne dowiązanie symboliczne w ogóle nie jest dotykany.
mark4o
30
ln -hfs newlocation existinglink

lub

ln -nfs newlocation existinglink

zmieni istniejący link, aby wskazywał na nową lokalizację

(-n i -h działają identycznie)

Od „man ln”

-h Jeśli plik_docelowy lub katalog_docelowy jest dowiązaniem symbolicznym, nie podążaj za nim. Jest to najbardziej przydatne z opcją -f, aby zastąpić dowiązanie symboliczne, które może wskazywać na katalog.

-f Jeśli plik docelowy już istnieje, odłącz go, aby mogło nastąpić łącze. (Opcja -f przesłania wszelkie wcześniejsze opcje -i.)

-s Creae dowiązanie symboliczne

Maxxx
źródło
-nfsWersja działa również na Linuksie, więc jest bardziej mobilny, czy ktoś obchodzi.
Cromax,
10

Próbować:

unlink /path/to/current/link
ln -s /path/to/target /path/to/symbolic/link
pyłek
źródło
1
Na moim MacBooku Pro z końca 2013 roku z Mavericks musiałem zmienić dwa parametry: ln -s / path / to / symbolic / link / path / to / target
Marius Waldal
1

Polecenie ln nie pozwala zmieniać łączy, a jedynie tworzyć nowe.

mk12
źródło
0

Czy porównałeś uprawnienia do linków i celów przed i po zmianie linku? Być może trzeba będzie wykonać odpowiednie polecenia chown i chmod, aby działało.

Josh
źródło
Cóż, nawet nie wiem jak to zmienić, więc nie. I nie wiem, co robią chown i chmod.
mk12
2
chown zmienia własność pliku i / lub katalogu. chmod zmienia uprawnienia do pliku i / lub katalogu. Są one standardowe w prawie każdej platformie Unix. Za dużo szczegółów, by je wyjaśnić tutaj, dlatego polecam przeglądanie każdego z nich w samouczkach. Możesz także zrobić „man chown” lub „man chmod”, aby przeczytać aktualną instrukcję polecenia (naciśnij q, aby wyjść z instrukcji).
churnd