Cô lập các tập tin và chạy wc trên chúng
Những gì wc -l /etc/*
nó *
sẽ mở rộng đến tất cả các mục trong /etc/
thư mục. Do đó, mục tiêu là cô lập các tệp và thực hiện wc
trên chúng. Có một số cách để làm như vậy.
cho vòng lặp với bài kiểm tra
Các test
lệnh, hoặc thường xuyên hơn viết tắt là [
có thể được dùng để tìm xem tư liệu là một tập tin bình thường như vậy:
[ -f "$FILE" ]
Do đó, những gì chúng ta có thể làm là lặp lại tất cả các mục trong /etc/
và chạy wc
trên chúng khi và chỉ khi lệnh trên trả về đúng. Thích như vậy:
for i in /etc/*; do [ -f "$i" ] && wc -l "$i" ; done
tìm thấy
Chúng tôi cũng có thể sử dụng find
với -maxdepth
, -type
và -exec
cờ
find /etc/ -maxdepth 1 \( -type f -o -type l \) -exec wc -l {} +
-maxdepth
thông báo tìm cách sâu trong cấu trúc thư mục để đi; giá trị 1 chỉ có nghĩa là các tệp trong thư mục chúng ta muốn.
-type f
bảo nó tìm các tệp thông thường, HOẶC (được biểu thị bằng -o
cờ) cho các liên kết sybolic (được đại diện bởi type l
). Tất cả những điều tốt đẹp đó được bao bọc trong các dấu ngoặc được ()
thoát ra \
để shell giải thích chúng như là một phần củafind
lệnh, hơn là một cái gì đó khác.
-exec COMMAND {} +
cấu trúc ở đây chạy bất cứ lệnh nào chúng ta đưa ra, +
biểu thị để lấy tất cả các tệp được tìm thấy và nhét chúng làm dòng lệnh lập luận với LỰA CHỌN.
Để sản xuất tổng số chúng ta có thể đầu ra ống tail
như vậy
$ find /etc/ -maxdepth 1 \( -type f -o -type l \) -exec wc -l {} + | tail -n 1
[sudo] password for xieerqi:
11196 total
Lưu ý phụ
Tuy nhiên, việc sử dụng dễ dàng hơn wc -l /etc/* 2>/dev/null | tail -1
, như trong câu trả lời của LD James, tuy nhiên find
nên là một phần của thói quen xử lý các tệp để tránh xử lý tên tệp khó. Để biết thêm thông tin về điều đó, hãy đọc bài luận Làm thế nào để xử lý tên tập tin chính xác