foo/bar
เป็นไดเรกทอรี (และคุณมีสิทธิ์ในการค้นหาเพื่อfoo
ให้สามารถระบุได้ว่าfoo/bar
เป็นไดเรกทอรี) ในกรณีนั้นเมื่อคุณ:
ln -s new/target link
หรือ
ln -fs new/target link
ที่เข้าใจว่าเป็นการสร้างtarget
symlink ใหม่ภายในlink
ไดเรกทอรี ( link
เป็นไดเรกทอรีเพราะเป็น symlink ไปยังfoo/bar
ไดเรกทอรี) ดังนั้นคุณจะสร้าง:
foo/bar/target -> new/target
เพื่อเอาชนะสิ่งนั้น GNU ln
จึงมี-T
ตัวเลือกสำหรับชื่อลิงก์ที่ถูกพิจารณาว่าเป็นชื่อลิงก์เสมอและไม่ใช่เป็นไดเรกทอรีเพื่อสร้างลิงก์ (s) ระบบดังนั้นด้วย GNU ln
:
ln -fsT new/target link
จะทำงาน. เหมือนก่อนหน้านี้มันจะลบlink
symlink ดั้งเดิมและสร้างใหม่ด้วยnew/target
เป็นเป้าหมาย (และกระบวนการ 'euid และ egid เป็นเจ้าของ)
GNU ln
ยังมี-n
ตัวเลือกอีกด้วย มันทำงานเหมือน-T
ยกเว้นเมื่อlink
จริง ๆ แล้วเป็นไดเรกทอรีจริงซึ่งในกรณีนี้มันจะยังสร้าง symlink ภายในไดเรกทอรีนั้น (แทนที่จะล้มเหลวด้วยข้อผิดพลาด)
ตัวเลือกที่ดีที่สุดของคุณคือการลบลิงค์ออกก่อนแล้วจึงสร้างใหม่:
rm -f link && ln -s new/target link