mv ไฟล์โดยไม่ทำลาย symlink ไปยังไฟล์นั้น


24

เป็นไปได้ไหมที่ mvไฟล์มีการแบ่งลิงก์สัญลักษณ์ไปยังไฟล์นั้น? การตอบกลับครั้งแรกของฉันคือไม่และฉันกำลังหาทางออกโดยใช้สคริปต์เพื่อเปลี่ยนลิงค์ทันทีหลังจากการย้าย แต่ฉันสงสัยว่าคนอื่น ๆ เข้าหาปัญหานี้อย่างไร เส้นทางและชื่อของ symlinks เป็นที่รู้จักกันล่วงหน้าดังนั้นในทางทฤษฎีสิ่งที่ฉันต้องทำคือ:

  1. รับเป้าหมายของลิงค์
  2. mv เป้าหมาย
  3. สร้างลิงก์ไปยังเป้าหมายใหม่
  4. สร้างลิงค์ใหม่ไปยังเป้าหมายใหม่ (ต่างจากลิงค์เดิมซึ่งฉันยังต้องการเก็บไว้ตอนนี้)

ในวันต่อมา:

  1. ลบลิงค์เก่า

1-4 จะถูกห่อหุ้มด้วยสคริปต์ทุบตี แต่ฉันสงสัยว่าใครมีวิธีการที่สง่างามกว่าหรือรู้ถึงคำสั่งในตัวหรือคำสั่งที่ฉันไม่ทราบ


2
ฮาร์ดลิงก์ไม่มีปัญหานี้ พวกเขามีข้อเสียอื่น ๆ แม้ว่า :-)
Stéphane Gimenez

3
ใช่ไม่สามารถใช้ฮาร์ดลิงก์ได้เนื่องจากไฟล์อยู่ในหลายระบบไฟล์
เกบ

2
นอกจากนี้: ไม่สามารถฮาร์ดลิงก์ไปยังไดเรกทอรี
sampablokuper

คำตอบ:


8

คุณอยู่ในเส้นทางที่ถูกต้องฉันไม่คิดว่าจะมีวิธีที่ง่ายกว่าลำดับที่คุณอธิบาย

ขั้นตอนที่ 3 และ 4 มีความสับสนเล็กน้อย หากคุณต้องการกำหนดเป้าหมายลิงก์ที่มีอยู่อีกครั้งคุณยังคงชื่อเดิมไว้คุณสามารถใช้ln -fเพื่อเขียนทับไฟล์ที่มีอยู่ หากคุณต้องการให้ชื่อลิงก์ของคุณเปลี่ยนไปเพื่อสะท้อนชื่อเป้าหมายใหม่ลำดับของคุณนั้นถูกต้อง


1
เฮ้ใช่แค่อ่านส่วนนั้นอีกครั้งและตอนนี้ฉันก็สับสนเหมือนกัน ฉันจะปรับแต่งมันดังนั้นจึงเหมาะสมมากขึ้น ขอบคุณ
เกบ

ฉันสับสนเล็กน้อยเกี่ยวกับการใช้ ln -f แต่ฉันคิดว่าสคริปต์ @fred ที่โพสต์อาจช่วยอธิบายได้ว่ามันทำงานอย่างไร หน้าคนไม่ได้ช่วยอะไรมากอย่างน่าประหลาดใจ
เกบ

@gabe เวอร์ชันเดิมของคำตอบของฉันมีความถูกต้อง-s -fแต่ในขณะที่ mofifying มันมัน "หลงทาง" -s: ผิด! จากวิกิพีเดีย : 'ln' โดยไม่มีตัวเลือกใดสร้างลิงค์ยาก 'ln -f' บังคับให้ลิงค์ยาก ... ดังนั้นขอบคุณสำหรับคำถามมันยืนยันไวยากรณ์จริง ๆ สำหรับฉันตอนนี้จริง ๆ แล้วมันทำให้ฉันตรวจสอบอีกครั้ง สิ่งต่าง ๆ ... มันต้องใช้ln -s -f.. (ฉันได้ทำการปรับเปลี่ยน)
Peter.O

4

สำหรับสถานการณ์ของคุณ:

# change target of a symbolic link
# -------------
# ln -s, --symbolic    make symbolic links instead of hard links
# ln -f, --force       remove existing destination files
#
# Setup: make junk.link to  file junk
  echo hello > ~/junk
  ln -s ~/junk ~/junk.link;  cat ~/junk.link
#
# move file and point the link to it.
  org="$(readlink ~/junk.link)"
  new="$org".moved
  mv "$org" "$new"
  ln -s -f "$new" "$new".link  # '-s' for a soft link

หมายเหตุ: มันจะมีความซับซ้อนมากขึ้นถ้ามีลิงค์ของลิงก์
Peter.O

0

ฉันมีปัญหาต่อไป ฉันพบชุดไอคอนที่ดีมากเรียกว่า "Suru ++"

Suru ++ 20 [ปราศจากข้อผิดพลาดอย่างเป็นทางการและรองรับ 11 DEs]

แต่ชุดไอคอนนี้ถูกสร้างขึ้นใน svg ภาพทั้งหมด ตอนนี้ฉันต้องการที่จะใช้มันใน Fluxbox และสร้างรายการเมนู แต่มันเป็นไปได้เฉพาะกับรูปไอคอน png ฉันดาวน์โหลดต้นแบบภายในที่มีไอคอนทั้งหมดในรูปแบบ svg และใช่ฉันสามารถแปลงจากบรรทัดคำสั่ง svg เป็น png ทั้งหมด ok สร้างสำหรับแต่ละ ขนาดโฟลเดอร์เช่น 16x16, 24x24 px แต่ในโฟลเดอร์นั้นเป็นลิงค์สัญลักษณ์ไปยังไฟล์ svg:

ส่วนขยาย svg ภายในลิงก์สัญลักษณ์ที่ฉันต้องการเปลี่ยนเป็น png

หากมีวิธีที่เป็นไปได้ที่จะเปลี่ยนนามสกุล svg เป็น png ภายในลิงก์สัญลักษณ์ทั้งหมดชุดรูปแบบไอคอนจะทำงานได้ดีในเมนู Fluxbox และตัวจัดการไฟล์ ฉันสร้างไอคอนเกี่ยวกับชุดรูปแบบนี้ที่ใช้ใน Xubuntu แต่เป็นภาษาสเปน

พระเจ้าอวยพร

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