Dosyaları ayırın ve üzerlerinde wc çalıştırın
Bu wc -l /etc/*, dizindeki *tüm öğelere genişleyecek /etc/. Böylece amaç dosyaları izole etmek ve wcüzerinde işlem yapmaktır . Bunu yapmanın birkaç yolu vardır.
testli döngü için
testDaha sık olarak kısaltılır komut veya [kullanılabilen bir madde şöyle normal bir dosya olup olmadığını bulmak için:
[ -f "$FILE" ]
Dolayısıyla, yapabileceğimiz tüm öğeler üzerinde yineleme yapmak ve sadece yukarıdaki komut doğruysa bunları /etc/çalıştırmaktır wc. Şöyle ki:
for i in /etc/*; do [ -f "$i" ] && wc -l "$i" ; done
bulmak
Biz de kullanabilirsiniz findile -maxdepth, -typeve -execbayrakları
find /etc/ -maxdepth 1 \( -type f -o -type l \) -exec wc -l {} +
-maxdepthdizin yapısında ne kadar derine ineceğini bulur; 1 değeri yalnızca istediğimiz dizindeki dosyalar anlamına gelir.
-type f normal dosyaları aramasını söyler VEYA ( -obayrakla temsil edilir type l) sybolic bağlantılar (ile temsil edilir ) Tüm bu iyilik, kabuğun onları başka bir şeyden ziyade komutanın bir parçası olarak yorumlaması için ()kaçan köşeli parantez içine alınır .\find
-exec COMMAND {} +Buradaki yapı, verdiğimiz +tüm komutları çalıştırır , bulunan tüm dosyaları almayı ve bunları COMMAND'a komut satırı argümanları olarak doldurmayı belirtir.
Toplam üretmek için biz boru çıkış tailgibi olabilir
$ find /etc/ -maxdepth 1 \( -type f -o -type l \) -exec wc -l {} + | tail -n 1
[sudo] password for xieerqi:
11196 total
Kenar notu
wc -l /etc/* 2>/dev/null | tail -1LD James'in cevabında olduğu gibi kullanımı daha kolaydır , ancak findzor dosya adlarını işlemekten kaçınmak için dosyalarla uğraşma alışkanlığının bir parçası olmalıdır. Bununla ilgili daha fazla bilgi için Dosya adlarıyla doğru şekilde nasıl başa çıkılacağı makalesini okuyun