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
test
Daha 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 find
ile -maxdepth
, -type
ve -exec
bayrakları
find /etc/ -maxdepth 1 \( -type f -o -type l \) -exec wc -l {} +
-maxdepth
dizin 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 ( -o
bayrakla 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ış tail
gibi 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 -1
LD James'in cevabında olduğu gibi kullanımı daha kolaydır , ancak find
zor 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