Bagaimana cara saya (secara rekursif) mendeteksi semua symlink di direktori yang mengidentifikasi target mereka secara absolut dan bukan secara relatif?
Karena tautan ini sangat mungkin rusak ketika seluruh pohon direktori dipindahkan, saya ingin memiliki cara untuk mengidentifikasi mereka.
Bahkan tautan relatif dapat rusak jika pohon direktori dipindahkan (jika mereka menunjuk ke luar akar pohon direktori), tapi saya pikir ini dibahas dalam pertanyaan ini .
Jawaban:
Untuk menemukan link mutlak, Anda dapat menggunakan
find
's-lname
pilihan jika Andafind
mendukung bahwa (itu tersedia setidaknya di GNUfind
, pada FreeBSD dan MacOS):Ini meminta
find
untuk mencetak nama-nama file yang merupakan tautan simbolik dan yang isinya (target) cocok/*
dengan menggunakan globbing shell.Sebenarnya, POSIX menentukan bahwa nama path absolut dimulai dengan satu
/
atau tiga atau lebih/
; untuk mencocokkan itu, Anda dapat menggunakanPada sistem apa // foo / bar berbeda dari / foo / bar? memiliki detail lebih lanjut tentang itu.
(Terima kasih kepada Sato Katsura untuk menunjukkan bahwa itu
-lname
adalah GNU-spesifik, untuk fd0 karena menyebutkan bahwa itu sebenarnya juga tersedia pada setidaknya FreeBSD dan macOS, dan untuk Stéphane Chazelas untuk memunculkan definisi pathname absolut POSIX.)sumber
find ./ -t l -exec ls -l {} \;
yang seharusnya menjadi alternatif yang aman. Akan mudah untuk mengurai outputnya melakukan apa pun yang diperlukan.ls
? ...Anda mungkin menemukan
symlinks
utilitas bermanfaat:Dan dapat memperbaiki tautan untuk Anda. Di sini dengan
-t
memberi tahu apa yang akan dilakukan:sumber