Cara menemukan semua tautan simbolis yang menunjuk ke sembarang file / direktori di dalam direktori yang diberikan


14

Pada pertanyaan ini atau yang satu ini (misalnya) Anda akan mendapatkan solusi tentang cara mencari symlink yang menunjuk ke direktori tertentu (sebut saja /dir1), sementara saya tertarik pada tautan simbolik yang mungkin menunjuk ke file / folder di dalamnya /dir1.

Saya ingin menghapus direktori tersebut tetapi saya tidak yakin bahwa saya aman untuk melakukannya, seperti pada direktori lain (sebut saja /dir2), saya mungkin memiliki symlink yang menunjuk ke bagian dalam /dir1.

Lebih lanjut, saya mungkin telah membuat symlink ini menggunakan jalur absolut atau relatif. Satu-satunya bantuan saya adalah bahwa saya tahu symlink yang ingin saya periksa ada di sistem file yang terpasang, aktif /dir2.

Jawaban:


15

Anda dapat menemukan semua tautan simbolik menggunakan:

find / -type l 

Anda mungkin ingin menjalankan ini sebagai root untuk sampai ke setiap tempat pada disk.

Anda dapat memperluas ini menggunakan readlink -funtuk mendapatkan path lengkap dari tautan dan Anda harus dapat grepoutput terhadap direktori target yang Anda pertimbangkan untuk dihapus:

find / -type l -exec readlink -f {} + | grep -F /dir2

Menggunakan find / -type l -printf '%l\n'tidak berfungsi saat Anda mendapatkan tautan relatif seperti ../tmp/xyzyang mungkin mengarah ke direktori target Anda, tetapi tidak cocok karena mereka tidak sepenuhnya diperluas.


1
Dalam hal subtree dapat bermanfaat untuk mengikuti symlink:find -L /subtree -xtype l -exec readlink -f {} +
ruvim

3

Dalam kasus saya, jawaban yang diterima tidak berguna (karena tidak menampilkan sumber tautan). Inilah yang bekerja untuk saya.

Saya mengatasinya menggunakan dua -execklausa:

find /home/ -type l -exec readlink -nf {} ';' -exec echo " -> {}" ';' | grep "/dir2"

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.