ตามห่วงโซ่การเชื่อมโยงทั้งหมด
เส้นทางจริง
เส้นทางจริง(1) ทำให้คุณได้รับปลายทางที่สมบูรณ์ของลิงก์ แต่มันให้คุณเท่านั้น สุดท้าย ปลายทาง ดังนั้นหากคุณมีลิงค์เชน มันจะแสดงเฉพาะพาธของไฟล์/โฟลเดอร์จริงสุดท้ายที่เชนชี้ไปในที่สุด
ดังนั้น ในกรณีของคุณ ถ้า ../../e/f/g/ชม
เป็นไฟล์หรือโฟลเดอร์จริง คุณจะเห็นเส้นทางที่แน่นอน แต่ถ้าหนึ่งในส่วนประกอบนั้นเป็น symlink ด้วย มันจะวนซ้ำจนกว่าจะแก้ไข symlink ทั้งหมดที่ขวางทาง
อ่านลิงค์
คุณยังสามารถใช้ อ่านลิงค์(1)
คำสั่งด้วยแฟล็ก -f หรือ -e ซึ่งจะให้ผลลัพธ์ที่คล้ายกับ เส้นทางจริง
.
-f, --canonicalize canonicalize โดยทำตามทุก symlink ใน
ทุกองค์ประกอบของชื่อที่กำหนดแบบเรียกซ้ำ
ทั้งหมดยกเว้นองค์ประกอบสุดท้ายต้องมีอยู่
-e, --canonicalize-canonicalize ที่มีอยู่โดยทำตามทุก symlink ใน
ทุกองค์ประกอบของชื่อที่กำหนดแบบเรียกซ้ำ
ต้องมีองค์ประกอบทั้งหมด
หลีกเลี่ยงการติดตามห่วงโซ่การเชื่อมโยงทั้งหมด
หากฉันเข้าใจถูกต้อง คุณไม่ต้องการติดตามห่วงโซ่ไปยังส่วนประกอบสุดท้าย แต่เพื่อรับเส้นทางที่สมบูรณ์ของลิงก์จริงเท่านั้น มันน่าเกลียดเล็กน้อย แต่คุณสามารถทำบางสิ่งเช่น:
LINK=./a/b/c/d
/usr/bin/realpath --no-symlinks "$(dirname ${LINK})/$(readlink ${LINK})"
คำอธิบาย:
$ dirname $LINK # dirname ./a/b/c/d
./ก/ข/ค
$readlink $LINK # readlink ./a/b/c/d
../../e/f/g/ชม
$ echo "$(dirname ${LINK})/$(readlink ${LINK})"
./a/b/c/../../e/f/g/ชม
$ /usr/bin/realpath --no-symlinks "$(dirname ${LINK})/$(readlink ${LINK})"
/home/a/e/f/g/ชม
หากคุณต้องการดูเฉพาะลิงก์ที่เกี่ยวข้องกับ CWD ของคุณ คุณสามารถเพิ่มอาร์กิวเมนต์ --relative-to ได้:
$ /usr/bin/realpath --no-symlinks --relative-to ./ "$(dirname ${LINK})/$(readlink ${LINK})"
ก/จ/ฉ/ก/ชม
ใช้การค้นหา
คุณสามารถรับอาร์กิวเมนต์สำหรับคำสั่ง realpath ที่ฉันเคยแสดงมาก่อนได้โดยใช้คำสั่ง find:
$ ค้นหา ./ -type l -printf "%h/%l\n"
./a/b/c/../../e/f/g/ชม
จากคนพบ:
%h ไดเร็กทอรีนำของชื่อไฟล์ (ทั้งหมดยกเว้นองค์ประกอบสุดท้าย) ถ้า
ชื่อไฟล์ไม่มีเครื่องหมายทับ (เนื่องจากเป็นไฟล์ปัจจุบัน
ไดเร็กทอรี) ตัวระบุ %h จะขยายเป็น "."
%l วัตถุของลิงก์สัญลักษณ์ (สตริงว่างหากไฟล์ไม่ใช่ลิงก์สัญลักษณ์)
จากนั้นคุณสามารถรวมกับคำสั่ง realpath จากด้านบน
$ ค้นหา ./ -type l -printf "%h/%l\n" | xargs /usr/bin/realpath -s
/home/a/e/f/g/ชม
หากคุณต้องการดูลิงก์ที่เกี่ยวข้องกับ CWD ของคุณเท่านั้น:
$ ค้นหา ./ -type l -printf "%h/%l\n" | xargs /usr/bin/realpath -s --relative-to ./
ก/จ/ฉ/ก/ชม