foo/bar
là một thư mục (và bạn có quyền tìm kiếm foo
để có thể xác định đó foo/bar
là một thư mục). Trong trường hợp đó, khi bạn làm:
ln -s new/target link
hoặc là
ln -fs new/target link
Điều đó được hiểu là tạo ra một target
liên kết tượng trưng mới trong link
thư mục ( link
là một thư mục vì đó là một liên kết tượng trưng đến foo/bar
thư mục). Vì vậy, bạn thực sự sẽ tạo ra một:
foo/bar/target -> new/target
Để khắc phục điều đó, GNU ln
có một -T
tùy chọn cho tên liên kết luôn được coi là tên liên kết và không phải là thư mục để tạo (các) liên kết trong. Vì vậy, với GNU ln
:
ln -fsT new/target link
sẽ làm việc. Giống như trước đây, nó sẽ xóa link
liên kết ban đầu và tạo lại liên kết với new/target
tư cách là mục tiêu (và quá trình 'euid và egid là chủ sở hữu).
GNU ln
cũng có một -n
tùy chọn. Nó hoạt động như -T
ngoại trừ khi link
thực sự là một thư mục thực sự trong trường hợp đó nó vẫn sẽ tạo liên kết tượng trưng bên trong thư mục đó (thay vì thất bại với một lỗi).
Có thể, tùy chọn tốt nhất của bạn là xóa liên kết trước và sau đó tạo lại liên kết:
rm -f link && ln -s new/target link