foo/bar
adalah direktori (dan Anda memiliki izin pencarian foo
untuk dapat menentukan itu foo/bar
adalah direktori). Dalam hal itu, ketika Anda melakukannya:
ln -s new/target link
atau
ln -fs new/target link
Itu dipahami sebagai membuat target
symlink baru di dalam link
direktori ( link
adalah direktori karena itu adalah symlink ke foo/bar
direktori). Jadi, Anda akan benar-benar membuat:
foo/bar/target -> new/target
Untuk mengatasinya, GNU ln
memiliki -T
opsi agar nama tautan selalu dianggap sebagai nama tautan, dan bukan sebagai direktori untuk membuat tautan. Jadi, dengan GNU ln
:
ln -fsT new/target link
akan bekerja. Seperti sebelumnya, itu akan menghapus link
symlink asli dan membuatnya lagi dengan new/target
sebagai target (dan proses 'euid dan egid sebagai pemilik).
GNU ln
juga memiliki -n
opsi. Ini berfungsi seperti -T
kecuali ketika link
sebenarnya merupakan direktori nyata dalam hal ini masih akan membuat symlink di dalam direktori itu (bukannya gagal dengan kesalahan).
Mudah-mudahan, opsi terbaik Anda adalah menghapus tautan terlebih dahulu dan kemudian membuatnya kembali:
rm -f link && ln -s new/target link