Saya ingin menghitung jumlah total baris dalam semua /etc
file tetapi bukan file dalam sub direktori, jadi saya mengetik: wc -l /etc/* | tail -1
dan hasilnya seperti:
xxxx is a directory
yyyy is a directory
total 1752
Pertanyaan saya adalah, bagaimana saya bisa menghilangkan (menghapus) komentar ini, dan adakah cara yang lebih baik untuk melakukan jenis penghitungan ini?
Jawaban:
Anda dapat menampilkan pesan kesalahan ke / dev / null
Dengan perintah ini Anda hanya melihat jumlah baris dalam file yang dapat dibaca dunia. Untuk melihat jumlah baris semua file Anda harus meninggikan perintah
sudo
.sumber
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 melakukanwc
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:Jadi yang bisa kita lakukan adalah beralih ke semua item
/etc/
dan jalankanwc
jika dan hanya jika perintah di atas mengembalikan true. Seperti itu:Temukan
Kami juga dapat menggunakan
find
dengan-maxdepth
,-type
, dan-exec
benderafind /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 olehtype l
). Semua kebaikan itu tertutup ke dalam tanda kurung yang()
diloloskan\
sehingga shell menafsirkannya sebagai bagian darifind
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 ituCatatan samping
Lebih mudah hanya digunakan
wc -l /etc/* 2>/dev/null | tail -1
, seperti dalam jawaban LD James, namunfind
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 benarsumber
find
melakukannya dengan mudah:Keluaran:
TETAPI jika Anda hanya ingin nomor sebagai output dan tidak ada yang lain:
EDIT :
newlines
error kos berkata menang. Hanya menggunakan-exec
memperbaikinya. Juga,/etc
tidak mengandung file seperti itu.Keluaran:
Seperti yang ditunjukkan oleh kos , perintah di atas dapat direduksi menjadi:
EDIT :
newlines
error kos berkata menang. Hanya menggunakan-exec
memperbaikinya. Juga,/etc
tidak mengandung file seperti itu.Keluaran:
sumber
-iname '*'
? tidakfind
cocok dengan semuanya secara default?'*'
.Menggunakan z-shell (
zsh
), ratu dari shell , bukan bash.sumber