2012-01-13 2 views
6

Điều này sẽ khá đơn giản, nhưng tôi không tìm ra. Tôi có một cơ sở mã lớn hơn 4GB dưới Linux. Một vài tệp tiêu đề và tệp xml được tạo trong khi tạo (sử dụng gnu make). Nếu nó quan trọng các tập tin tiêu đề được tạo ra dựa trên các tập tin xml.tệp grep dựa trên dấu thời gian

Tôi muốn tìm kiếm từ khóa trong tệp tiêu đề được sửa đổi lần cuối sau một phiên bản thời gian (thời gian biên dịch bắt đầu) và các tệp xml tương tự, nhưng các truy vấn grep riêng biệt.

Nếu tôi chạy nó trên tất cả các tệp tiêu đề hoặc xml có thể, phải mất rất nhiều thời gian. Chỉ những người được tạo tự động. Hơn nữa tìm kiếm phải được đệ quy, vì có rất nhiều thư mục và thư mục con.

+0

Bạn có thể muốn bao gồm các ví dụ về các lệnh hiện tại của mình. Tiết kiệm cho chúng tôi những rắc rối của việc chỉ ra những thứ rõ ràng mà bạn đã biết. – sehe

Trả lời

11

Để tìm 'pattern' trong tất cả các tập tin mới hơn some_file trong thư mục hiện hành và thư mục con của nó một cách đệ quy:

find -newer some_file -type f -exec grep 'pattern' {} + 

Bạn có thể xác định dấu thời gian trực tiếp trong định dạng date -d và sử dụng find xét nghiệm khác ví dụ , -name, -mmin.

Danh sách tệp cũng có thể được tạo bởi hệ thống xây dựng của bạn nếu find quá chậm.

Các công cụ cụ thể khác như ack, etags, GCCSense có thể được sử dụng thay vì grep.

+0

Cảm ơn, tôi đã gặp một cái gì đó có giá trị hơn là chỉ trả lời. Tôi chưa bao giờ gặp GCCSense. Tôi đã tìm kiếm các khả năng hoàn thành mã nhật thực trong vim. Đoán phát triển gần đây của nó. – Kamath

+0

Tại sao trên trái đất có cờ "-newer" hơn nhưng không phải cờ "-older" ??? – Guillochon

+2

@Guillochon: ['! -newer'] (http://stackoverflow.com/q/13838845/4279) – jfs

11

Bạn có thể sử dụng find lệnh:

find . -mtime 0 -type f 

in một danh sách tất cả các file (-type f) trong và bên dưới thư mục hiện hành (.) đã được thay đổi trong vòng 24 giờ qua (-mtime 0, 1 sẽ là 48h, 2 sẽ là 72h, ...). Hãy thử

grep "pattern" $(find . -mtime 0 -type f) 
+0

Câu trả lời thú vị, hoạt động tốt trên CentOS 5.6. – crmpicco

1

Sử dụng tính năng này. Bởi vì nếu find không trả lại tệp, thì grep sẽ tiếp tục chờ một đầu vào tạm dừng tập lệnh.

find . -mtime 0 -type f | xargs grep "pattern"