ลิงก์สัญลักษณ์: ค้นหาไฟล์ทั้งหมดที่เชื่อมโยงไปยังไฟล์นี้


115

Hallo ทั้งหมดฉันต้องทำสิ่งนี้ใน linux:

  • ระบุ: ชื่อไฟล์ 'foo.txt'
  • ค้นหา: ไฟล์ทั้งหมดที่เป็นสัญลักษณ์ลิงก์ไปยัง 'foo.txt'

ทำอย่างไร? ขอบคุณ!


คำตอบ:


132

ขึ้นอยู่กับว่าหากคุณพยายามค้นหาลิงก์ไปยังไฟล์เฉพาะที่ถูกเรียกfoo.txt,นี่เป็นวิธีเดียวที่ดี:

find -L / -samefile path/to/foo.txt

ในทางกลับกันหากคุณเพียงแค่พยายามค้นหาลิงก์ไปยังไฟล์ใด ๆที่มีการตั้งชื่อfoo.txtแล้วก็มีบางอย่างเช่น

find / -lname foo.txt

หรือ

find . -lname \*foo.txt # ignore leading pathname components

แก้ไขปัญหาได้อย่างสวยงาม ขอบคุณทุกคนที่ตอบกลับ
lukmac

8
ขณะที่ฉันแสดงความคิดเห็นเกี่ยวกับคำตอบที่ถูกลบคุณสามารถใช้-xtype lเพื่อค้นหา
ลิงก์

คุณอาจต้องการเรียกคืนเนื่องจากไฟล์ใด ๆ ที่ชี้ไปที่ foo.txt อาจถูกชี้ไปที่ลิงก์อื่น ... เช่น: A-> B-> foo.txt, / tmp / C-> B-> foo.txt ฯลฯ
Olivier Dulac

สิ่งนี้สามารถทำงานได้เช่นกันหากส่วนประกอบชื่อของคุณเป็นไดเร็กทอรีหลักที่มีชื่อในลิงก์โดยการค้นหาfind . -lname '*foo.dir*'(ตรงกันเช่นfile.txt -> ../foo.dir/file.txt)
Yonatan

22

ค้นหาหมายเลขไอโหนดของไฟล์จากนั้นค้นหาไฟล์ทั้งหมดด้วยหมายเลขไอโหนดเดียวกัน:

$ ls -i foo.txt
41525360 foo.txt

$ find . -follow -inum 41525360

หรือลองใช้lnameตัวเลือกfindนี้ แต่จะใช้ไม่ได้หากคุณมีลิงก์เชื่อมโยงแบบสัมพัทธ์เช่นa -> ../foo.txt

$ find . -lname /path/to/foo.txt

3
หากใช้ GNU เวอร์ชันล่าสุดคุณสามารถใช้-samefileตัวเลือก-Lเพื่อให้ได้ผลเช่นเดียวกันโดยไม่ต้องค้นหาไอโหนดด้วยตัวคุณเอง
Hasturkun

5
แต่จะพบไฟล์ในระบบไฟล์อื่นที่มีหมายเลขไอโหนดเดียวกัน
DigitalRoss

ถ้าfooเป็นไดเรกทอรีให้ใช้ln -diในบรรทัดเดียว:find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
rubo77

1
คำตอบนี้ผิด symlink ไม่มีไอโหนดเดียวกันกับเป้าหมาย สิ่งนี้จะใช้ได้กับไฟล์ที่อยู่ในโฟลเดอร์ที่มีลิงก์สัญลักษณ์เท่านั้น แต่นี่ไม่ใช่สิ่งที่ถูกถาม
Jules Lamur

4

ฉันชอบใช้symlinksยูทิลิตี้ซึ่งมีประโยชน์เช่นกันเมื่อค้นหา symlink ที่เสีย ติดตั้งโดย:

sudo apt install symlinks

แสดง symlink ทั้งหมดในโฟลเดอร์ปัจจุบันและโฟลเดอร์ย่อย:

symlinks -rv .
  • -r: เรียกซ้ำ
  • -v: verbose (แสดง symlink ทั้งหมดไม่ใช่เฉพาะลิงค์ที่เสีย)

หากต้องการค้นหา symlink เฉพาะให้ทำgrepดังนี้

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