Cách tìm kiếm một từ trong toàn bộ nội dung của một thư mục trong linux


15

cần tìm kiếm một cái gì đó trong toàn bộ nội dung

Tôi đang cố gắng:

find . | xargs grep word

Tôi gặp lỗi:

xargs: trích dẫn không rõ ràng

Làm thế nào để đạt được điều này?

Câu trả lời:


15

xargsmong đợ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ợ -rhoặc -Rtù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 -execchí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 findcho 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 findxargscó 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

+1 đặc biệt cho /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.
Peter.O

12

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"

grep -rin cho đệ quy-case_insensitive-show_line_number

Tôi muốn có thể tìm kiếm trong nội dung của từng tập tin.

cái đầu tiên trả về bất kỳ độ trễ nào trong bất kỳ tệp nào, chỉ định tệp nơi tìm thấy độ trễ

2

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-0khắc phục các vấn đề trích dẫn thông thường:

find . -type f -print0 | xargs -0 grep word

0

Ngoài ra còn có ack , nó được thiết kế để bỏ qua các thư mục đặc biệt như .svn, .gitvà như vậy. Đó là một công cụ hàng ngày cho các nhà phát triển.

Nó khá gần với cho các công tắc thông thường.

Ví dụ. :

ack -r string .

Gói ack-grepvề lượt thích debian & debian.


0

Trong thư mục hiện tại, bạn có thể sử dụng grep:

 grep -irl root .

-1

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"


Thông báo lỗi từ xargs ("Trích dẫn không hoàn chỉnh") có nghĩa là OP có tệp. trong đó có một trích dẫn trong tên của nó. Dòng của bạn sẽ uốn cong trên đó là tốt. Giống như mu lưu ý, bạn cần một sự chấm dứt khác nhau.
thiton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.