Câu trả lời:
xargs
mong đợi đầu vào ở định dạng mà không có lệnh nào khác tạo ra, vì vậy thật khó để sử dụng hiệu quả. Điều sai ở đây là bạn có một tệp có tên phải được trích dẫn ở đầu vào xargs
(có thể chứa a '
).
Nếu grep của bạn hỗ trợ -r
hoặc -R
tùy chọn cho tìm kiếm đệ quy, hãy sử dụng nó.
grep -r word .
Nếu không, sử dụng -exec
chính của find
. Đây là cách thông thường để đạt được hiệu ứng tương tự như xargs
, ngoại trừ không có ràng buộc về tên tệp. Các phiên bản hợp lý gần đây find
cho phép bạn nhóm một số tệp trong một cuộc gọi đến lệnh phụ. Vượt qua /dev/null
để grep
đảm bảo rằng nó sẽ hiển thị tên tệp trước mỗi trận đấu, ngay cả khi nó được gọi trên một tệp duy nhất.
find . -type f -exec grep word /dev/null {} +
Các phiên bản cũ hơn find
(trên các hệ thống cũ hơn hoặc OpenBSD hoặc các tiện ích bị giảm như BusyBox) chỉ có thể gọi lệnh phụ trợ trên một tệp tại một thời điểm.
find . -type f -exec grep word /dev/null {} \;
Một số phiên bản find
và xargs
có các tiện ích mở rộng cho phép chúng giao tiếp chính xác, sử dụng các ký tự null để phân tách tên tệp để không yêu cầu trích dẫn. Ngày nay, chỉ có OpenBSD có tính năng này mà không có -exec … {} +
.
find . -type f -print0 | xargs -0 grep word /dev/null
Tôi đoán bạn có nghĩa là tùy chọn đầu tiên
grep đệ quy, để tìm kiếm nội dung bên trong tệp
grep -R "content_to_search" /path/to/directory
ls đệ quy, để tìm kiếm các tập tin phù hợp
ls -lR | grep "your_search"
Nếu bạn có các công cụ GNU (mà bạn làm nếu thẻ Linux là chính xác) thì bạn có thể sử dụng -print0
và -0
khắc phục các vấn đề trích dẫn thông thường:
find . -type f -print0 | xargs -0 grep word
Trong thư mục hiện tại, bạn có thể sử dụng grep:
grep -irl root .
Tôi nghĩ rằng bạn muốn tìm một chuỗi trong các tập tin
Thử find . -name "*" | xargs grep -l "string"
/dev/null
. Thật phiền toái khi định dạng đầu ra có thể thay đổi, tùy thuộc vào số lượng tệp được khớp ... cảm ơn.