Bagaimana cara mengubah symlink di OS X?

20

Bagaimana cara mengubah ke mana symlink menunjuk, tanpa menghapus dan membuat yang baru (with ln -s "/path/to/point/to" "/path/where/symlink/is")?

Ketika saya mencoba melakukan itu ke symlink "Current" Java, Java bahkan tidak akan bekerja (dari baris perintah, setidaknya, mengatakan 'Segmentasi Fault') tetapi itu kembali normal ketika saya mengembalikan symlink "Current" lama dengan Time Mesin (tapi kemudian saya tahu saya harus menggunakan /Applications/Utilities/Java Preferences.apppula untuk mengubah versi java saat ini).

mk12
sumber

Jawaban:

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

Namun, utilitas Java Preferences berubah lebih dari sekadar tautan simbolik; Anda harus menggunakannya untuk memastikan bahwa versi Java diubah.

mark4o
sumber
bukankah perintah mv hanya mengganti nama saja ..?
mk12
.. Saya mencobanya, itu hanya memindahkan symlink baru ke folder yang lama menunjuk.
mk12
Perintah pertama membuat symlink yang menunjuk ke tempat yang Anda inginkan, dan perintah kedua menggantikan pointer yang ada ke tempat lama dengan pointer ke tempat baru. Mv adalah atom sehingga symlink akan selalu ada.
mark4o
.. Tapi itu masih tidak berfungsi .. itu memindahkan pointer baru ke folder yang menunjuk ke yang lama.
mk12
/path/where/symlink/isadalah symlink yang Anda ubah. Menggunakan perintah ini akan mengubahnya untuk menunjuk ke /path/to/point/to. Folder yang ditunjuk oleh symlink asli tidak disentuh sama sekali.
mark4o
29
ln -hfs newlocation existinglink

atau

ln -nfs newlocation existinglink

akan mengubah tautan yang ada ke titik ke lokasi baru

(-n dan -h identik dalam operasi)

Dari 'man ln'

-h Jika target_file atau target_dir adalah tautan simbolik, jangan ikuti itu. Ini paling berguna dengan opsi -f, untuk mengganti symlink yang mungkin menunjuk ke direktori.

-f Jika file target sudah ada, maka batalkan tautannya sehingga tautan tersebut dapat terjadi. (Opsi -f menimpa opsi -i sebelumnya.)

-s Creae tautan simbolis

Maks
sumber
The -nfsversi bekerja juga pada Linux, sehingga lebih portabel jika ada yang peduli.
Cromax
10

Mencoba:

unlink /path/to/current/link
ln -s /path/to/target /path/to/symbolic/link
lebih
sumber
1
Pada akhir 2013 MacBook Pro saya dengan Mavericks, saya harus mengganti dua parameter: ln -s / path / ke / symbolic / link / path / to / target
Marius Waldal
1

Perintah ln tidak membiarkan Anda mengubah tautan, hanya membuat yang baru.

mk12
sumber
0

Sudahkah Anda membandingkan izin pada tautan dan target sebelum dan sesudah Anda mengubah tautan? Anda mungkin hanya perlu menindaklanjuti dengan perintah chown dan chmod yang sesuai untuk membuatnya berfungsi.

Josh
sumber
Yah saya bahkan tidak tahu bagaimana mengubahnya jadi tidak. Dan aku tidak tahu apa yang chown dan chmod lakukan.
mk12
2
chown mengubah kepemilikan file dan / atau direktori. chmod mengubah izin file dan / atau direktori. Ini adalah standar di hampir setiap platform unix. Terlalu banyak detail untuk dijelaskan di sini, jadi saya akan merekomendasikan masing-masing googling untuk tutorial. Anda juga dapat melakukan "man chown" atau "man chmod" untuk membaca manual perintah yang sebenarnya (tekan q untuk keluar dari manual).
churnd