Pisahkan file dan jalankan wc pada file tersebut
Apa yang wc -l /etc/*dilakukan adalah itu *akan diperluas ke semua item di dalam /etc/direktori. Dengan demikian tujuannya adalah untuk mengisolasi file dan melakukan wcpadanya. Ada beberapa cara untuk melakukannya.
untuk loop dengan tes
The testperintah, atau lebih sering disingkat [dapat digunakan untuk menemukan apakah suatu item adalah file biasa seperti:
[ -f "$FILE" ]
Jadi yang bisa kita lakukan adalah beralih ke semua item /etc/dan jalankan wcjika dan hanya jika perintah di atas mengembalikan true. Seperti itu:
for i in /etc/*; do [ -f "$i" ] && wc -l "$i" ; done
Temukan
Kami juga dapat menggunakan finddengan -maxdepth, -type, dan -execbendera
find /etc/ -maxdepth 1 \( -type f -o -type l \) -exec wc -l {} +
-maxdepthmenginformasikan menemukan seberapa dalam dalam struktur direktori untuk pergi; Nilai 1 berarti hanya file dalam direktori yang kita inginkan.
-type f-omemintanya untuk mencari file biasa, ATAU (diwakili oleh bendera) untuk tautan simbolis (diwakili oleh type l). Semua kebaikan itu tertutup ke dalam tanda kurung yang ()diloloskan \sehingga shell menafsirkannya sebagai bagian dari findperintah, bukan sesuatu yang lain.
-exec COMMAND {} +struktur di sini menjalankan perintah apa pun yang kita berikan, yang +menunjukkan untuk mengambil semua file yang ditemukan dan memasukkannya sebagai baris perintah ke PERINTAH.
Untuk menghasilkan total kita bisa menyalurkan output tailseperti itu
$ find /etc/ -maxdepth 1 \( -type f -o -type l \) -exec wc -l {} + | tail -n 1
[sudo] password for xieerqi:
11196 total
Catatan samping
Lebih mudah hanya digunakan wc -l /etc/* 2>/dev/null | tail -1, seperti dalam jawaban LD James, namun findharus menjadi bagian dari kebiasaan untuk berurusan dengan file untuk menghindari pemrosesan nama file yang sulit. Untuk info lebih lanjut tentang itu baca esai Cara menangani nama file dengan benar