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 wc
padanya. Ada beberapa cara untuk melakukannya.
untuk loop dengan tes
The test
perintah, 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 wc
jika 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 find
dengan -maxdepth
, -type
, dan -exec
bendera
find /etc/ -maxdepth 1 \( -type f -o -type l \) -exec wc -l {} +
-maxdepth
menginformasikan menemukan seberapa dalam dalam struktur direktori untuk pergi; Nilai 1 berarti hanya file dalam direktori yang kita inginkan.
-type f
-o
memintanya 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 find
perintah, 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 tail
seperti 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 find
harus 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