การค้นหาลิงก์สัญลักษณ์และฮาร์ดทั้งหมดไปยังไฟล์บน UNIX


9

หากฉันมีไฟล์เฉพาะในระบบไฟล์ UNIX มีวิธีใช้ bash เพื่อค้นหาลิงก์ทั้งหมดไปยังไฟล์นั้นทั้งสัญลักษณ์และฮาร์ดไดรฟ์หรือไม่? หากฉันต้องการคำสั่งที่แตกต่างกันสำหรับแต่ละรายการพวกเขาคืออะไร

คำตอบ:


8

ลองสิ่งนี้กับ GNU find:

find /start/dir -L -samefile /file/to/check -exec ls -li {} \;

ตัวอย่างผลลัพธ์:

1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x1
1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x2
1234983 lrwxrwxrwx 1 user1 user1 2 2009-10-31 16:56 ./testx -> x1
2345059 lrwxrwxrwx 1 user2 user2 2 2010-01-03 16:17 ./x3 -> x1

คุณสามารถใช้-lsแทนได้-execแต่มันจะแสดงไอโหนดและข้อมูลอื่น ๆ ของไฟล์เป้าหมายแทนที่จะเป็นไฟล์แต่ละไฟล์


เอาต์พุตนี้แสดงลิงก์ที่ยากและ sym ลิงก์ Sym ระบุโดย -> ลูกศร?
aaaidan

@aaaidan: ใช่ถูกต้องแล้ว หมายเลขไอโหนดของ x1 และ x2 เหมือนกันซึ่งบ่งบอกว่ามันเป็นลิ้งค์ฮาร์ด ลูกศรบ่งชี้ว่าเป็น symlink การใช้-Lและ-samefileทำให้ทั้งคู่ถูกแสดงรายการ หากคุณไม่ระบุ-Lลิงก์สัญลักษณ์จะไม่ถูกติดตาม (ดูman find)
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

2

หากคุณไม่มี GNU Find คุณสามารถทำได้:

find / -inum "$(ls -i /file/to/check | cut -d ' ' -f 1)"

แต่จะไม่ทำงานกับลิงก์สัญลักษณ์


1
โอ้ฉันเห็นแล้วว่าคำถามนี้ตอบคำถามนี้แล้ว: superuser.com/questions/12972/to-see-hardlinks-by-ls
Ollie Saunders
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.