Belirli bir dizindeki herhangi bir dosyaya / dizine işaret eden tüm sembolik bağlantılar nasıl bulunur?


15

Bu soruda veya bu konuda (örneğin) belirli bir dizine /dir1işaret eden sembol bağlantılarının nasıl aranacağına dair çözümler alacaksınız (diyelim ), muhtemelen içerideki herhangi bir dosyaya / klasöre işaret eden sembolik bağlantılarla ilgileniyorum /dir1.

Ben böyle bir dizini silmek istiyorum ama başka bir dizinde (diyelim ki) olduğu gibi, bunu yapmak için güvenli olduğundan emin değilim, /dir2iç kısımlarına işaret eden semboller olabilir /dir1.

Ayrıca, bu sembolik bağlantıları mutlak veya göreli yollar kullanarak oluşturmuş olabilirim. Tek yardımım, kontrol etmek istediğim simgelerin bağlı bir dosya sisteminde olduğunu biliyorum /dir2.

Yanıtlar:


15

Tüm sembolik bağlantıları aşağıdakileri kullanarak bulabilirsiniz:

find / -type l 

diskteki her yere ulaşmak için bunu root olarak çalıştırmak isteyebilirsiniz.

readlink -fBağlantının tam yolunu almak için bunları kullanarak genişletebilirsiniz grepve çıktıyı silmeyi düşündüğünüz hedef dizine göre yapabilmeniz gerekir :

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

Hedef yönünüzü gösterebilir find / -type l -printf '%l\n'gibi göreli bağlantılar aldığınız gibi kullanmak işe yaramaz ../tmp/xyz, ancak tam olarak genişlemedikleri için eşleşmezler.


1
Alt ağaç durumunda find -L /subtree -xtype l -exec readlink -f {} +
sembol bağlantılarını

3

Benim durumumda, kabul edilen cevap yararlı değildi (çünkü bağlantı kaynağını çıktılamadı). İşte benim için işe yarayan.

İki -execcümle kullanarak bunun etrafında çalıştım :

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.