Geçerli dizindeki tüm yazılım bağlantıları (sembolik bağlantılar) nasıl bulunur?


10

Soru, kabuk komut dosyası oluşturma ile ilgilidir bash.

Geçerli dizindeki hangi dosyaların yumuşak bağlantılar olduğunu bir komut dosyasıyla nasıl kontrol edebilirim ?

Yanlış terimi kullanmam durumunda, yazılım bağlantıları dendiğimde, kullanarak oluşturulan dosyalara atıfta bulunuyorum ln -s.

Düşünmeyi başarabildiğim tek şey ls -la, bir ifade olarak değerlendirmek ve sonuçlarını ayrıştırmaktır, ancak açıkçası bu en iyi çözüm değildir.


1
Bunlara "simgesel bağlantılar" denir ("sabit bağlantılar" ın aksine).
sonraki duyuruya kadar duraklatıldı.

Righto, muhtemelen terim yanlış anlaşıldığını biliyordum, kafaları için teşekkürler
bguiz

Yumuşak bağlantı da iyi, ancak bir boşluk var. :-) ( en.wikipedia.org/wiki/Symbolic_link )
Arjan

Yanıtlar:



14

Gerçekten bir senaryoya ihtiyacınız olmayabilir. Alt klasörde yinelenmeden, yalnızca geçerli klasördeki sembolik bağlantıları göstermek için:

bulmak. -maxdepth 1 -tip l-baskı

Veya daha fazla bilgi edinmek için şunlardan birini kullanın:

bulmak. -maxdepth 1 -tip l -exec ls -ld {} +
bulmak. -maxdepth 1-tipi l -print0 | xargs -0 ls -ld

Bir dosyanın sembolik bir bağlantı olup olmadığını söylemek için, sembolik bir bağlantı readlinkdeğilse hiçbir şey çıkmayacak bir dosya kullanılabilir . Aşağıdaki örnek oldukça kullanışlı değildir, ancak readlinknormal dosya ve klasörlerin nasıl yoksayıldığını gösterir . Şunlardan birini kullanın:

bulmak. -maxdepth 1 -exec readlink {} +
bulmak. -maxdepth 1 -print0 | xargs -0 okuma bağlantısı

Yukarıdaki -exec ... +ve xargs ...daha hızlı olduğunu unutmayın -exec ... \;. Sevmek:

zaman bulma / usr / bin -maxdepth 1 -tip l -exec ls -ld {} \;
gerçek 0m0.372s
kullanıcı 0m0.087s
sys 0m0.163s

zaman bulma / usr / bin -maxdepth 1 -tip l -exec ls -ld {} +
gerçek 0m0.013s
kullanıcı 0m0.004s
sys 0m0.008s

zaman bulma / usr / bin -maxdepth 1 -tip l -print0 | xargs -0 ls -ld
gerçek 0m0.012s
kullanıcı 0m0.004s
sys 0m0.009s

Polsy'nin cevabını daha çok sevdim, hala senin için +1, çünkü bir gün bir kabuk betiğinin dışında yapmam gerekebilir.
bguiz

1
Mutlaka xargs'a ihtiyacınız yok. Sadece find komutunu kullanabilirsiniz. -maxdepth 1 -exec readlink {} \;
stib

Doğru, @stib ama xargsolan çok daha hızlı benim Mac; benim düzenlememe bakın. Ama yeni bugün bir şey öğrendim: de var +yerine \;(Gerçi bazı iddia olduğunu bu vardır / sorunları vardı ile grep.)
Arjan
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.