แทนที่ลิงก์สัญลักษณ์ซึ่งเชื่อมโยงกับเป้าหมายไดเรกทอรี


17

ฉันต้องการอัพเกรดเซิร์ฟเวอร์ Tomcat จาก 7.0.19 เป็น 7.0.20

ฉันเคยไปln -s apache-tomcat-7.0.19 tomcat7มาแล้วดังนั้นตอนนี้ฉันต้องเชื่อมโยง tomcat7ไปยังเป้าหมายใหม่โดยใช้คำสั่งต่อไปนี้ln -s --force apache-tomcat-7.0.21 tomcat7แต่มันไม่ทำงานอย่างที่ฉันคาดไว้: มันสร้างลิงก์สัญลักษณ์tomcat7/apache-tomcat-7.0.21แทนการแทนที่tomcat7ลิงก์สัญลักษณ์ที่มีอยู่ด้วยเป้าหมายใหม่

ตัวอย่าง

# mkdir v1 v2
# ln -s v1 v
# ln -s v2 v
# ll v*
lrwxrwxrwx. 1 root root    2 Sep  5 16:02 v -> v1

v1:
total 0
lrwxrwxrwx. 1 root root 2 Sep  5 16:02 v2 -> v2

v2:
total 0

ฉันตรวจสอบคู่มือlnแล้วฉันคิดว่าln -s --force apache-tomcat-7.0.21 tomcat7ใช้แบบฟอร์มที่ 3 แทนแบบฟอร์มที่ 1 เพื่ออธิบายพารามิเตอร์ มันคลุมเครือระหว่างรูปแบบที่ 1 และ 3 ดังนั้นวิธีการแทนที่ลิงค์สัญลักษณ์ในกรณีนี้คืออะไร?

คำตอบ:


16

คุณต้องการ-Tตัวเลือก:

$ mkdir v1
$ ln -s v1 foo
$ ls -FlA | grep foo
lrwxrwxrwx 1 phil phil     2 2011-09-05 01:58 foo -> v1/
$ mkdir v2
$ ln -s -T -f v2 foo
$ ls -FlA | grep foo
lrwxrwxrwx 1 phil phil     2 2011-09-05 01:59 foo -> v2/

ขอบคุณนั่นคือสิ่งที่ฉันต้องการ ช่างน่าเสียดายจริง ๆ ฉันเห็นตัวเลือกนี้ในความช่วยเหลือ แต่ฉันไม่รู้ว่ามันทำอะไรกันแน่
LiuYan 刘研

16

ในขณะที่แทนที่ลิงค์สัญลักษณ์ไปยังไดเรกทอรีเราควรใช้-nตัวเลือก

ตัวอย่าง: ln -sfn /path/to/directory /target/directory


1
นี่ควรเป็นคำตอบที่ยอมรับได้ แก้ปัญหาและซับเดียว / กะทัดรัด
จนถึง

1
คำตอบที่ได้รับการยอมรับยังช่วยแก้ปัญหาและเป็นหนึ่งในสายการบิน ... เว้นแต่ว่าฉันเข้าใจผิดมันอาจมีขนาดกะทัดรัดเท่ากัน ฉันไม่คิดว่ามันจำเป็นต้องมีการแยก-และเว้นวรรคก่อนทุกธงเหมือนที่มี
ArtOfWarfare

3

ทำไมไม่เพียงแค่

rm tomcat7
ln -s apache-tomcat-7.0.21 tomcat7

?

นี่จะไม่แตะไดเรกทอรีเก่า apache-tomcat-7.0.19 แต่เพียงแค่ลบลิงค์เก่า จากนั้น ln สามารถสร้างใหม่ได้


ขอบคุณ! ผมทำอย่างนี้ขณะนี้อยู่ในสคริปต์ของฉัน แต่ฉันคิดว่ามันแตกต่างจากcp -f/ mv -fซึ่งใช้คำสั่งเดียวที่จะดำเนินการเขียนทับดังนั้นฉันกำลังมองหาวิธีการแก้ปัญหาคำสั่งเดียว
LiuYan 刘研
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.