Tôi đang cố gắng tìm cách quét toàn bộ hệ thống Linux của mình cho tất cả các tệp có chứa một chuỗi văn bản cụ thể. Chỉ cần làm rõ, tôi đang tìm văn bản trong tệp chứ không phải trong tên tệp.
Khi tôi đang tìm cách làm điều này, tôi đã bắt gặp giải pháp này hai lần:
find / -type f -exec grep -H 'text-to-find-here' {} \;
Tuy nhiên, nó không hoạt động. Nó dường như hiển thị mọi tập tin duy nhất trong hệ thống.
Đây có phải là gần với cách thích hợp để làm điều đó? Nếu không, tôi nên làm thế nào? Khả năng tìm chuỗi văn bản này trong các tệp sẽ cực kỳ hữu ích cho một số dự án lập trình tôi đang thực hiện.
-H
bằng -l
(và có thể grep
bằng fgrep
). Để loại trừ các tệp có các mẫu tên nhất định, bạn sẽ sử dụng find
theo cách nâng cao hơn. Thật đáng để học cách sử dụng find
. Chỉ cần man find
.
find … -exec <cmd> +
dễ gõ hơn và nhanh hơn find … -exec <cmd> \;
. Nó chỉ hoạt động nếu <cmd>
chấp nhận bất kỳ số lượng đối số tên tệp. Việc tiết kiệm thời gian thực hiện đặc biệt lớn nếu <cmd>
bắt đầu chậm như các tập lệnh Python hoặc Ruby.
grep "pattern" path/*.txt
.
như một ký tự đại diện đơn, trong số những ký tự khác. Lời khuyên của tôi là luôn luôn sử dụng fgrep hoặc egrep.