dosyaları link bağlantı hedefine göre listele


23

Sembolik link hedef adını filtreleyerek dosyaların listesini (ve daha sonra bu listeyle bir şeyler yapabilirim) nasıl alabilirim ? Örneğin, aşağıdaki listeden sadece ilk dört dosyayla ilgileniyorum (hedef içeriyor bar):

foo ->  /tmp/bar
bar ->  /home/me/bartoo
baz ->  /home/me/public/barthree
zoo ->  /usr/share/bar
moo ->  /tmp/foo
roc ->  /tmp/roc

Yanıtlar:


31

Symlink türündeki tüm dosyaları getirmek için find komutunu kullanabilir ve -ilnamebağlantı hedefinin adına göre arama yapma seçeneği ekleyebilirsiniz . Bu, tıpkı -inamebağlantı adı yerine bağlantı hedefi yerine ancak olduğu gibi çalışır .

find -type l -ilname "*bar*"

Bu hala hedef değil, linkin adını yazdıracak. Hedeflerin isimlerini yazdırmak istiyorsanız, şunu deneyin:

find -type l -ilname "*bar*" -printf "%l\n"

Veya tam bir lsstil çıktı elde edin

find -type l -ilname "*bar*" -ls

" Listeyle bir şeyler yap " derken ne anlama geldiği belirsizdir, ancak bağlantı dosyalarında çalışmak istiyorsanız, -execaşağıdakileri bulmak için argümanı kullanabilirsiniz:

find -type l -ilname "*bar*" -exec touch {} \;

Ancak, bağlantı hedefleri üzerinde işlem yapmanız gerekiyorsa -printf, hedef değerleri elde etmek için kullanmanız ve daha sonra xargsişlem yapmak için kendiniz kullanmanız gerekecektir. Böyle bir şey yapabilirsin:

find -type l -printf "%l\n" | grep bar | xargs touch

... aynı zamanda , adınızı eşleştirmek için kullanmak grepyerine nasıl kullanılacağını gösterir find -ilname, ancak bu şekilde de yapabilirsiniz.


teşekkür ederim Caleb! Kesin soruma, kesinlikle kullanacağım bazı yan kanal vakalarını kapsayan yanı sıra tamamen cevap verdiniz.
matt wilkie

1
Bunun find /dev/disk/ -type l -ilname "*sde*"işe yaramadığı hakkında bir fikrin var mı?
Kova Gücü

GNU bulmayı gerektirir.
16'da
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.