สร้าง symlink - เขียนทับหากมีอยู่


54

ฉันต้องการลบข้อมูล/path/to/data/folder/month/date/hour/minute/fileและเชื่อมโยงไปยัง/path/to/recent/fileและทำสิ่งนี้โดยอัตโนมัติทุกครั้งที่มีการสร้างไฟล์

สมมติว่าฉันจะไม่ทราบล่วงหน้าถ้า/path/to/recent/fileมีอยู่ฉันจะสร้างมันขึ้นมาอย่างไร (ถ้าไม่มี) หรือแทนที่ (ถ้ามี) ฉันแน่ใจว่าฉันสามารถตรวจสอบว่ามันมีอยู่แล้วทำการลบ symlink แต่ฉันสงสัยว่ามีคำสั่งง่ายๆที่จะทำสิ่งที่ฉันต้องการในขั้นตอนเดียว


หากปลายทางมีอยู่ แต่ไม่ใช่ symlink คุณต้องการ / คาดหวังว่าจะเกิดอะไรขึ้น
Toby Speight

คำตอบ:


34

โปรดอ่านคู่มือการใช้งาน

ln -sfn /new/target /path/to/symlink

$ man ln

-n, - ไม่มีการอ้างอิงถึง
ถือว่า LINK_NAME เป็นไฟล์ปกติหากเป็นลิงก์สัญลักษณ์ไปยังไดเรกทอรี


1
ทำไมนี่เป็นคำตอบที่ถูกต้อง?
Mrchief

1
@Mrchief หาก/path/to/symlinkเป็น symlink ไปยังไดเรกทอรีแล้วโดยไม่ต้องใช้-nธงคุณจะได้ symlink ที่สร้างขึ้น/path/to/symlink/targetแทนการแทนที่/path/to/symlink
Flimm

โปรดทราบว่าใน macOS สิ่งนี้ยังคงไม่ทำงานในบางกรณีเช่นเมื่อ/path/to/symlinkมีอยู่และเป็นไดเรกทอรีและไม่ใช่ symlink ฉันคิดว่าวิธีเดียวที่จะหลีกเลี่ยงมันก็คือการวิ่งrm -rfก่อน
Flimm

78

นี่คือวัตถุประสงค์ของการln's -fตัวเลือก: มันเอาแฟ้มที่มีอยู่ปลายทางถ้ามีก่อนที่จะสร้างการเชื่อมโยง

ln -sf /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

จะสร้าง symlink ที่/path/to/recent/fileชี้ไปที่/path/to/data/folder/month/date/hour/minute/fileแทนที่ไฟล์ที่มีอยู่หรือ symlink ไปยังไฟล์หากจำเป็น (และใช้งานได้ดีหากไม่มีไฟล์นั้นอยู่แล้ว)

หากไดเรกทอรีหรือ symlink ไปยังไดเรกทอรีมีอยู่แล้วด้วยชื่อเป้าหมายแล้ว symlink จะถูกสร้างขึ้นภายในนั้น (ดังนั้นคุณจะต้องจบลง/path/to/recent/file/fileในตัวอย่างด้านบน) -nตัวเลือกที่มีอยู่ในบางรุ่นlnจะดูแล symlinks ไปยังไดเรกทอรีสำหรับคุณแทนที่พวกเขาเท่าที่จำเป็น:

ln -sfn /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

POSIXlnไม่ได้ระบุไว้-nดังนั้นคุณจึงไม่สามารถไว้ใจได้ มากของlnพฤติกรรมคือการดำเนินการที่กำหนดไว้เพื่อให้คุณจริงๆต้องตรวจสอบรายละเอียดของระบบที่คุณกำลังใช้ หากคุณกำลังใช้GNUlnคุณสามารถใช้ตัวเลือก-tและ-Tตัวเลือกเช่นกันเพื่อทำให้พฤติกรรมของมันสามารถคาดเดาได้อย่างเต็มรูปแบบต่อหน้าไดเรกทอรี ( เช่นล้มเหลวแทนที่จะสร้างลิงก์ภายในไดเรกทอรีที่มีอยู่ด้วยชื่อเดียวกัน)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.