Câu trả lời:
grep -l "string" * | wc -l
sẽ tìm kiếm "chuỗi" trong nội dung của tất cả các tệp trong thư mục làm việc và cho bạn biết có bao nhiêu kết quả khớp.
grep -lr "string" directory | wc -l
Nếu bạn không muốn tìm kiếm đệ quy, bạn có thể sử dụng find với tùy chọn maxdepth: find directory -maxdepth 1 -type f -exec grep -l "string" {} + | wc -l
Lưu ý rằng tùy chọn thứ hai này chậm hơn grep.
grep
Tham số s -l
sẽ chỉ xuất ra tên tệp trùng khớp $PATTERN
, wc
có thể đếm chúng sau đó.
grep -l "$PATTERN" * | wc -l
awk '/pattern_to_look_for/ {s+=1; nextfile;} END {print s}' *
Làm rõ: Điều này tìm kiếm số lượng tệp có "mẫu_to_look_for" trong nội dung của chúng chứ không phải trong tên tệp của chúng (như câu trả lời của Wag). Từ câu hỏi của bạn, thật khó để nói những gì bạn đang tìm kiếm.
find . ! -name . -prune -type f
(đừng bỏ lỡ các backticks). Lệnh này chỉ liệt kê các tập tin trong thư mục.
Điều này hoạt động trong Bash với bất kỳ tên tệp:
grep -lZ "$pattern" * | tr -cd '\000' | wc -c
Giải trình:
grep
's -Z
tùy chọn in tất cả các kết quả với một tách ␀-byte. Ký tự này không thể là một phần của tên tệp, vì vậy chúng ta chỉ cần đếm số lượng dấu phân cách để lấy số lượng tệp.tr
.wc
.