วิธีการเปลี่ยน symlink ใน OS X


20

ฉันจะเปลี่ยนตำแหน่งที่ symlink ชี้ไปยังได้อย่างไรโดยไม่ต้องลบและสร้างขึ้นใหม่ (ด้วยln -s "/path/to/point/to" "/path/where/symlink/is")

เมื่อฉันพยายามทำสิ่งนั้นกับ symlink "ปัจจุบัน" ของ Java Java จะไม่ทำงาน (จากบรรทัดคำสั่งอย่างน้อยก็พูดว่า 'Segmentation Fault') แต่มันกลับมาเป็นปกติเมื่อฉันเรียกคืน symlink "ปัจจุบัน" เก่าด้วย Time เครื่อง (แต่ต่อมาฉันพบว่าฉันควรใช้/Applications/Utilities/Java Preferences.appต่อไปเพื่อเปลี่ยนรุ่นจาวาปัจจุบัน)

คำตอบ:


8
mkdir /path/where/newsymlink
ln -s /path/to/point/to /path/where/newsymlink/is
mv /path/where/newsymlink/is /path/where/symlink/
rmdir /path/where/newsymlink

อย่างไรก็ตามยูทิลิตี้การตั้งค่า Java เปลี่ยนมากกว่าแค่การเชื่อมโยงสัญลักษณ์; คุณควรใช้สิ่งนั้นเพื่อให้แน่ใจว่าเวอร์ชั่น Java มีการเปลี่ยนแปลง


จะไม่คำสั่ง mv เพียงแค่เปลี่ยนชื่อมัน .. ?
mk12

.. ฉันพยายามมันแค่ย้าย symlink ใหม่ไปไว้ในโฟลเดอร์ที่ไฟล์เก่า ๆ ชี้ไป
mk12

คำสั่งแรกทำ symlink ที่ชี้ตำแหน่งที่คุณต้องการและคำสั่งที่สองจะแทนที่ตัวชี้ที่มีอยู่ไปยังตำแหน่งเดิมด้วยตัวชี้ไปยังตำแหน่งใหม่ mv เป็นอะตอมมิกดังนั้น symlink จะมีอยู่เสมอ
mark4o

.. แต่ก็ยังใช้งานไม่ได้ .. มันย้ายตัวชี้ใหม่ไปยังโฟลเดอร์ที่จุดเก่าชี้ไป
mk12

/path/where/symlink/isคือ symlink ที่คุณกำลังเปลี่ยนแปลง /path/to/point/toการใช้คำสั่งเหล่านี้จะเปลี่ยนมันชี้ไปที่ โฟลเดอร์ที่ symlink ดั้งเดิมชี้ไปยังไม่แตะเลย
mark4o

29
ln -hfs newlocation existinglink

หรือ

ln -nfs newlocation existinglink

จะเปลี่ยนลิงค์ที่มีอยู่ให้ชี้ไปที่การจัดสรรใหม่

(-n และ -h เหมือนกันในการทำงาน)

จาก 'man ln'

-h หาก target_file หรือ target_dir เป็นลิงก์สัญลักษณ์อย่าปฏิบัติตาม สิ่งนี้มีประโยชน์มากที่สุดด้วยตัวเลือก -f เพื่อแทนที่ symlink ซึ่งอาจชี้ไปที่ไดเรกทอรี

-f หากไฟล์เป้าหมายมีอยู่แล้วให้ยกเลิกการเชื่อมโยงเพื่อให้ลิงค์อาจเกิดขึ้น (ตัวเลือก -f จะแทนที่ตัวเลือก -i ก่อนหน้านี้)

-s Creae เป็นลิงก์สัญลักษณ์


-nfsรุ่นยังสามารถใช้งานบน Linux ดังนั้นมันจึงเป็นแบบพกพามากขึ้นถ้าทุกคนใส่ใจ
Cromax

10

ลอง:

unlink /path/to/current/link
ln -s /path/to/target /path/to/symbolic/link

1
ในช่วงปลายปี 2013 MacBook Pro กับ Mavericks ฉันต้องเปลี่ยนพารามิเตอร์ทั้งสอง: ln -s / path / to / symbolic / link / path / to / target
Marius Waldal

1

คำสั่ง ln ไม่อนุญาตให้คุณเปลี่ยนลิงค์สร้างใหม่เท่านั้น


0

คุณเปรียบเทียบสิทธิ์ในลิงก์และเป้าหมายก่อนและหลังเปลี่ยนลิงก์หรือไม่ คุณอาจต้องติดตามคำสั่ง chown และ chmod ที่เหมาะสมเพื่อให้มันทำงานได้


ฉันไม่รู้ด้วยซ้ำว่าจะเปลี่ยนแปลงยังไง และฉันไม่รู้ว่า chown และ chmod ทำอะไร
mk12

2
chown เปลี่ยนความเป็นเจ้าของไฟล์และ / หรือไดเรกทอรี chmod เปลี่ยนการอนุญาตของไฟล์และ / หรือไดเรกทอรี สิ่งเหล่านี้เป็นมาตรฐานในทุกแพลตฟอร์มของยูนิกซ์ รายละเอียดมากเกินไปที่จะอธิบายที่นี่ดังนั้นฉันขอแนะนำ googling สำหรับบทเรียนแต่ละบท นอกจากนี้คุณยังสามารถทำ "man chown" หรือ "man chmod" เพื่ออ่านคู่มือจริงของคำสั่ง (กด q เพื่อออกจากคู่มือ)
churnd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.