Menemukan semua tautan simbolis dan keras ke file di UNIX

9

Jika saya memiliki file tertentu dalam sistem file UNIX, apakah ada cara untuk menggunakan bash untuk menemukan semua tautan ke file itu, baik simbolis dan sulit? Jika saya memerlukan perintah berbeda untuk masing-masing, apa itu?

colin.t.welch
sumber

Jawaban:

8

Coba ini dengan GNU find:

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

Contoh output:

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

Anda bisa menggunakan -lsalih-alih -exectetapi itu akan menampilkan inode dan informasi lain dari file target dan bukan file individual.

Dijeda sampai pemberitahuan lebih lanjut.
sumber
Output ini menunjukkan tautan yang sulit dan sim? Tautan sym ditunjukkan oleh -> panah?
aaaidan
@aaaidan: Ya, itu benar. Nomor inode x1 dan x2 adalah sama yang menunjukkan bahwa mereka adalah tautan keras. Panah menunjukkan symlink. Menggunakan -Ldan -samefilemenyebabkan keduanya dicantumkan. Jika Anda menghilangkan -Lmaka tautan simbolik tidak diikuti (lihat man find).
Dijeda sampai pemberitahuan lebih lanjut.
2

Jika Anda tidak memiliki GNU Find, Anda dapat melakukan ini:

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

Tapi itu tidak akan berfungsi untuk tautan simbolik.

Saunders Ollie
sumber
1
Oh saya mengerti sekarang bahwa pertanyaan ini sudah menjawab ini: superuser.com/questions/12972/to-see-hardlinks-by-ls
Ollie Saunders