Câu hỏi Tìm kiếm đệ quy các tệp giữ một số văn bản cụ thể


Làm thế nào để đệ quy tạo một tệp văn bản có danh sách tất cả các tệp trên máy chủ của tôi chứa chuỗi cụ thể ở bất kỳ đâu trong tệp?

Tôi biết lệnh sau có thể được sử dụng để thay thế một chuỗi đệ quy

find /var/www -type f -print0 | xargs -0 sed -i 's/old string/new string/g'

Tôi không muốn thay thế chuỗi, tôi chỉ muốn một danh sách của tất cả các tập tin có chứa chuỗi.


4
2018-01-18 14:31


gốc


Đối với một người sử dụng cửa sổ tôi đã có thể đề nghị để viết một tập tin thực thi mà lưu đầu ra vào một tập tin và đặt nó trong lịch trình. Hãy thử bất cứ điều gì là thay thế linux cho quá trình này - Shekhar


Các câu trả lời:


Sử dụng grep thay vì sed:

find /var/www -type f -print0 | xargs -0 grep -i 'old string'

Từ cách bạn đặt câu hỏi, có vẻ như bạn chưa quen với grep. Đọc thêm về các tùy chọn của nó trong loại trang người đàn ông của nó: man grep tại dòng lệnh của bạn.

cập nhật để trả lời nhận xét - hãy thử thêm -l tùy chọn để chỉ hiển thị tên tệp. Các -i làm cho trường hợp tìm kiếm không nhạy cảm. Dễ sử dụng cả hai chỉ với một dấu gạch ngang: grep -il


7
2018-01-18 14:38



Điều này dường như không chỉ cho tôi đường dẫn / tệp chứa chuỗi mà tôi đang tìm kiếm. Vì một số lý do, tôi cũng nhận được văn bản từ các tập tin tìm kiếm quá. - oshirowanen
Đã thêm bit về -l - Doug Harris


Bạn cũng có thể sử dụng grep một mình mà không cần tìm:

grep -Rli 'old string' /var/www > list_of_files

4
2018-01-18 15:14





Bạn có thể thử thêm cờ -l vào lệnh để chỉ liệt kê các tên tệp

find /var/www -type f -print0 | xargs -0 grep -li 'old string'

1
2018-01-18 14:55





Hãy thử ack - nó nhanh hơn grep và hỗ trợ perl regex.

ack -la <pattern> /var/www

Trên một số hệ thống, gói này được gọi là "ack" và đôi khi được gọi là "ack-grep".


0
2018-03-04 05:10