วิธีค้นหาลิงก์สัญลักษณ์ทั้งหมดที่ชี้ไปยังไฟล์ / ไดเร็กทอรีใด ๆ ภายในไดเร็กทอรีที่กำหนด


15

เกี่ยวกับคำถามนี้หรือบนนี้ (ตัวอย่าง) คุณจะได้รับการแก้ปัญหาเกี่ยวกับวิธีการที่จะมองหา symlinks ชี้ไปที่ไดเรกทอรีที่กำหนด (ขอเรียกว่า/dir1) ในขณะที่ฉันสนใจที่จะเชื่อมโยงสัญลักษณ์อาจจะชี้ไปที่ไฟล์ / /dir1โฟลเดอร์ภายในใด

ฉันต้องการลบไดเรกทอรีดังกล่าว แต่ผมไม่แน่ใจว่าผมปลอดภัยที่จะทำเช่นนั้นในไดเรกทอรีอื่น ๆ (ขอเรียกว่า/dir2) ผมอาจจะมี symlinks /dir1ชี้ไปที่ชิ้นส่วนภายในของ

นอกจากนี้ฉันอาจสร้าง symlink เหล่านี้โดยใช้เส้นทางที่สมบูรณ์หรือญาติ ความช่วยเหลือเท่านั้นฉันว่าฉันรู้ว่า symlinks /dir2ที่ฉันต้องการที่จะตรวจสอบอยู่ในการติดตั้งระบบแฟ้มบน

คำตอบ:


15

คุณสามารถค้นหาลิงก์สัญลักษณ์ทั้งหมดได้โดยใช้:

find / -type l 

คุณอาจต้องการเรียกใช้สิ่งนี้ในฐานะรูทเพื่อไปยังทุกที่บนแผ่นดิสก์

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

find / -type l -exec readlink -f {} + | grep -F /dir2

การใช้find / -type l -printf '%l\n'ไม่ได้ผลในขณะที่คุณได้รับลิงก์สัมพัทธ์../tmp/xyzซึ่งอาจชี้ไปยัง dir เป้าหมายของคุณ แต่ไม่ตรงกันเนื่องจากลิงก์เหล่านั้นยังไม่ขยายเต็มที่


1
ในกรณีที่ทรีย่อยมีประโยชน์ในการติดตาม symlinks:find -L /subtree -xtype l -exec readlink -f {} +
ruvim

3

ในกรณีของฉันคำตอบที่ยอมรับไม่ได้มีประโยชน์ (เพราะมันไม่ได้ส่งออกแหล่งลิงค์) นี่คือสิ่งที่ทำงานให้ฉัน

ฉันทำงานโดยใช้สอง-execประโยค:

find /home/ -type l -exec readlink -nf {} ';' -exec echo " -> {}" ';' | grep "/dir2"

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