Để kiểm tra tất cả các tập tin có kích thước lớn hơn 1MB và chứa chuỗi "ERROR", câu lệnh nào phù hợp nhất?
Trả lời:
Đáp án đúng: A
Phương án A là đáp án chính xác.
- `find . -size +1M`: Tìm tất cả các tập tin trong thư mục hiện tại (`.`) có kích thước lớn hơn 1MB (`+1M`).
- `-exec grep -l 'ERROR' {} ;`: Thực thi lệnh `grep -l 'ERROR' {}` cho mỗi tập tin tìm được. `{}` được thay thế bằng tên của tập tin hiện tại. `grep -l` chỉ in ra tên của tập tin chứa chuỗi 'ERROR'. Dấu `;` kết thúc lệnh exec.
Phương án B sai vì `grep -r 'ERROR' *` sẽ tìm kiếm đệ quy chuỗi 'ERROR' trong tất cả các tập tin, và sau đó kết quả được chuyển cho `find . -size +1M`, nhưng `find` không thể lọc kết quả từ `grep` để chỉ tìm các tập tin lớn hơn 1MB.
Phương án C sai vì `xargs` sẽ gom các tên tập tin tìm được bởi `find` thành các đối số cho `grep`, nhưng điều này có thể gây ra lỗi nếu số lượng tập tin quá lớn. Hơn nữa, `xargs grep 'ERROR'` sẽ in ra các dòng chứa 'ERROR', chứ không phải tên tập tin.
Phương án D sai vì `awk` không hoạt động trực tiếp trên các tập tin theo cách này. Cú pháp `awk 'length($0) > 1048576 && /ERROR/' *` không đúng và có thể gây ra lỗi hoặc kết quả không mong muốn. `length($0)` sẽ tính độ dài của dòng hiện tại, không phải kích thước tập tin. Ngoài ra, việc sử dụng `*` ở cuối có thể dẫn đến việc `awk` cố gắng mở và xử lý nhiều tập tin cùng một lúc, điều này không phải là mục đích của câu hỏi.