Bagaimana menemukan dan mendaftar semua tautan simbolis yang dibuat untuk file tertentu?

52

Saya telah membuat banyak tautan simbolis pada berbagai jalur untuk file atau direktori tertentu. Saya ingin seluruh daftar jalur tautan simbolik yang dibuat (lokasi).

Contoh:

Saya membuat tautan simbolis untuk ~/Picturesdirektori pada banyak direktori. Bagaimana cara mendaftar semua symlink ke ~/Picturesdirektori itu?

Apakah itu mungkin? Jika ya, lalu bagaimana?

Avinash Raj
sumber
Anda perlu mencari lengkap, tidak ada jumlah yang disimpan seperti ada untuk hard-link. Lihat salah satu jawaban menggunakan find.
ctrl-alt-delor

Jawaban:

42

Berikut ini sebuah contoh:

find -L /dir/to/start -xtype l -samefile ~/Pictures

atau, mungkin lebih baik:

find -L /dir/to/start -xtype l -samefile ~/Pictures 2>/dev/null

untuk menghilangkan beberapa kesalahan seperti Permission denied,, Too many levels of symbolic linksatau File system loop detectedyang findmelemparnya ketika tidak memiliki izin yang tepat atau situasi lain.

  • -L - Ikuti tautan simbolis.

  • -xtype l - File adalah tautan simbolis

  • -samefile name- File mengacu pada inode yang sama dengan name. Ketika -Lberlaku, ini bisa termasuk tautan simbolik.

Catatan:

  • Gunakan huruf kecil L in -xtype l, bukan angka 1.
  • Di macOS / Darwin, -xtypeadalah -type.
Radu Rădeanu
sumber
Bisakah perintah itu diubah untuk menemukan tautan simbolis yang berisi lintasan? mis. file di seluruh sistem yang mungkin terhubung ke ~ / Pictures / A, ~ / Pictures / A / B / C, atau file apa pun di subdirektori ~ / Pictures>
snowbound
7

Sangat sederhana, gunakan opsi -lname:

find / -lname /path/to/original/dir

Dari man find:

-lname pattern
       File is a symbolic link whose contents match shell pattern pattern.  The
       metacharacters do not treat `/' or `.' specially.  If the -L option or the
       -follow option is in effect, this test returns false unless the symbolic link
       is broken.

Catatan : Ingatlah bahwa tautan simbolis bisa berada di mana saja, yang mencakup sistem jarak jauh (jika Anda berbagi file), jadi Anda mungkin tidak dapat menemukan semuanya.

Abdennour TOUMI
sumber
Perhatikan juga, jika symlink adalah jalur relatif seperti ../dirmaka itu tidak akan menemukan yang absolut /path/to/original/dirAnda malah dapat menggunakan pola dan menghilangkan positif palsu-lname \*dir
Jason S
2

Coba ini :

ls -i ~/

277566 Pictures

find . -follow -inum 277566(temukan direktori dengan nomor inode yang sama )

Ini akan menampilkan semua jalur tautan simbolisnya.

nux
sumber
4
Ini akan menemukan tautan keras, bukan tautan simbolis. Tautan keras membagikan nomor inode. tautan simbolik memiliki nomor inode yang berbeda. inode tautan simbolik memiliki jalur alih-alih daftar blokir.
Hildred
pertanyaannya tidak menyebutkan tautan simbolik keras atau lunak
nux