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?
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?
Jawaban:
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 -ls
alih-alih -exec
tetapi itu akan menampilkan inode dan informasi lain dari file target dan bukan file individual.
-L
dan -samefile
menyebabkan keduanya dicantumkan. Jika Anda menghilangkan -L
maka tautan simbolik tidak diikuti (lihat man find
).
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.