วิธีที่เหมาะสมในการทำเช่นนี้คือการใช้-n, --no-dereference
ตัวเลือกเช่นนั้น
$ ln -snf foo2 bar
นี่เป็นสาเหตุln
ให้ถือว่า symlink ที่มีอยู่เป็นไฟล์ มิฉะนั้นจะ dereferences bar
เพื่อfoo1
, ลงมาfoo1
และใช้เดิมTARGET
ชื่อเป็นLINK_NAME
และที่ว่าทำไมคุณท้ายด้วย symlink ที่จะfoo2
ถูกสร้างขึ้นภายในfoo1
ไดเรกทอรี manpage ที่ln
ระบุต่อไปนี้ ...
-n, - ไม่มีการอ้างถึง
ถือว่า LINK_NAME เป็นไฟล์ปกติหากเป็นลิงก์สัญลักษณ์ไปยัง
ไดเรกทอรี
ด้านล่างนี้คือเอาต์พุตเชลล์บนเดสก์ท็อป Arch Linux ที่มีเวอร์ชัน 8.21 ln
โดยมีและไม่มี--no-dereference
ตัวเลือกฉันได้ผลลัพธ์เดียวกันกับที่คุณทำโดยไม่มี--no-dereference
ตัวเลือก แต่ใช้--no-dereference
ตัวเลือกที่ได้ผลตามที่คาดหวัง
$ mkdir foo1 foo2
$ ln -s foo1 bar
$ ls -l bar
lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1
$ ln -sf foo2 bar
$ ls -l bar
lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1
$ ls -l foo1
total 0
lrwxrwxrwx 1 drew users 4 Sep 17 12:51 foo2 -> foo2
$ ln -snf foo2 bar
$ ls -l bar
lrwxrwxrwx 1 drew users 4 Sep 17 12:52 bar -> foo2
ln --version
อะไร?