การดัดแปลงลิงค์สัญลักษณ์สำหรับ HP unix


2

ฉันพยายามแก้ไขสิ่งต่อไปนี้เพื่อเปลี่ยนชื่อลิงก์สัญลักษณ์:

find /home/user/public_html/qa/ -type l \
  -lname '/home/user/public_html/dev/*' -printf \
  'ln -nsf $(readlink %p|sed s/dev/qa/) $(echo %p|sed s/dev/qa/)\n'\
 > script.sh

น่าเสียดายที่-lnameตัวเลือกนี้ใช้ไม่ได้กับ HPUX คุณรู้ไหมว่ามีสิ่งที่ฉันสามารถใช้ได้

เพียงเพื่อให้และทราบปัญหาของฉันฉันต้องการเปลี่ยนลิงก์สัญลักษณ์ทั้งหมดภายในโฟลเดอร์เฉพาะ

New Symbolic link --> /base/testusr/scripts 
Old Symbolic link --> /base/produsr/scripts

ตอนนี้โฟลเดอร์ "A" มีไฟล์ต่าง ๆ มากกว่า 100 ไฟล์ที่มีลิงค์นุ่ม ๆ ซึ่งฉันต้องเปลี่ยนในลักษณะนี้


การตอบคำถามกับผู้ใช้รายใดรายหนึ่งไม่ทำงาน
Dennis Williamson

ขอบคุณสำหรับการแก้ไขเดนนิสเนื่องจากสคริปต์ที่ฉันอ้างถึงมาจากดาวิดจึงพูดถึงชื่อของเขา
kalpesh

สวัสดีทุกปัญหาของฉันได้รับการแก้ไขด้วยวิธีแก้ปัญหาต่อไปนี้ "find. -type l -exec ll -a {} + | awk '{พิมพ์" ln -sf ", $ 11, $ 9}'> สคริปต์"
kalpesh

คำตอบ:


1

ด้วยเครื่องมือ POSIX lsเพียงวิธีเดียวที่จะมองเห็นเป้าหมายของการเชื่อมโยงสัญลักษณ์คือผ่าน readlinkน่าเสียดายที่คำสั่งLinux และ BSD ไม่ได้เป็นมาตรฐาน

การใช้lsมีความเปราะเนื่องจากคุณต้องแยกวิเคราะห์ชื่อไฟล์ สมมติว่าชื่อไฟล์ของคุณไม่มีการขึ้นบรรทัดใหม่และเป้าหมายของ symlink ไม่มีสตริงย่อย->คำสั่งจะls -l "$link" | sed 's/.* -> //'พิมพ์เป้าหมายของลิงก์

find /home/user/public_html/qa/ -type l |
while IFS= read -r link; do
  target=$(ls -l "$link" | sed 's/.* -> //')
  case $target in
    /home/user/public_html/dev/*)
      link_to_change=$(echo "$link" | sed s/dev/qa/)
      ln -nsf "$(echo "$target" | sed s/dev/qa/)" "$link_to_change";;
  esac
done
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.