tautan simbolik: temukan semua file yang memiliki tautan ke file ini

Jawaban:

132

Itu tergantung, jika Anda mencoba menemukan tautan ke file tertentu yang dipanggil foo.txt,maka ini adalah satu-satunya cara yang baik:

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

Di sisi lain, jika Anda hanya mencoba menemukan tautan ke file apa pun yang kebetulan diberi nama foo.txt, maka sesuatu seperti

find / -lname foo.txt

atau

find . -lname \*foo.txt # ignore leading pathname components
DigitalRoss
sumber
masalah diselesaikan dengan indah. Terima kasih untuk semua orang yang membalas.
lukmac
8
Saat saya mengomentari jawaban yang dihapus, Anda dapat menggunakan -xtype luntuk hanya menemukan daftar symlink
Hasturkun
Anda mungkin ingin mengulang, karena file mana pun yang mengarah ke foo.txt mungkin sendiri diarahkan oleh beberapa tautan lain ... mis: A-> B-> foo.txt, / tmp / C-> B-> foo.txt, dll.
Olivier Dulac
ini juga dapat berfungsi jika komponen nama Anda adalah direktori induk yang dinamai dalam tautan, dengan mencari find . -lname '*foo.dir*'(misalnya cocok file.txt -> ../foo.dir/file.txt)
Yonatan
22

Temukan nomor inode file dan kemudian cari semua file dengan nomor inode yang sama:

$ ls -i foo.txt
41525360 foo.txt

$ find . -follow -inum 41525360

Sebagai alternatif, coba lnameopsi find, tetapi ini tidak akan berfungsi jika Anda memiliki symlink relatif misalnyaa -> ../foo.txt

$ find . -lname /path/to/foo.txt
dogbane
sumber
3
Jika menggunakan versi terbaru GNU find, Anda juga dapat menggunakan -samefileopsi dengan -Luntuk efek yang sama, tanpa harus mencari inode sendiri
Hasturkun
5
Tetapi ini juga akan menemukan file di sistem file lain yang kebetulan memiliki nomor inode yang sama.
DigitalRoss
Jika fooadalah direktori, gunakan ln -di, dalam satu baris:find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
rubo77
1
Jawaban ini salah. Sebuah symlink tidak memiliki inode yang sama dengan targetnya. Ini hanya akan berfungsi untuk file di dalam folder symlink. Tapi bukan ini yang diminta.
Jules Lamur
4

Saya lebih suka menggunakan symlinksutilitas, yang juga berguna saat mencari symlink yang rusak. Instal oleh:

sudo apt install symlinks

Tampilkan semua symlink di folder dan subfolder saat ini:

symlinks -rv .
  • -r: rekursif
  • -v: verbose (tampilkan semua symlink, tidak hanya yang rusak)

Untuk menemukan symlink tertentu, cukup grep:

symlinks -rv . | grep foo.txt
Nik
sumber