Tôi thường sử dụng kiểu lệnh này để chạy grep
trên một số tệp:
find / -xdev -type f -print0 | xargs -0 grep -H "800x600"
Điều này thực sự làm là tạo một danh sách của mỗi tệp trên hệ thống, và sau đó cho mỗi tệp, thực hiện grep
với các đối số đã cho và tên của mỗi tệp.
Đối -xdev
số cho biết rằng nó phải bỏ qua các hệ thống tệp khác - điều này tốt cho việc tránh các hệ thống tệp đặc biệt như /proc
. Tuy nhiên, nó cũng sẽ bỏ qua các hệ thống tập tin bình thường - vì vậy, ví dụ, nếu thư mục / home của bạn nằm trên một phân vùng khác, nó sẽ không được tìm kiếm - bạn sẽ cần phải nói find / /home -xdev ...
.
-type f
có nghĩa là chỉ tìm kiếm các tệp, vì vậy các thư mục, thiết bị và các tệp đặc biệt khác bị bỏ qua (nó vẫn sẽ truy xuất vào các thư mục và thực thi grep
trên các tệp trong đó - dù sao nó sẽ không thực thi grep
trên thư mục, dù sao nó cũng không hoạt động). Và -H
tùy chọn để grep
bảo nó luôn in tên tệp trong đầu ra của nó.
find
chấp nhận tất cả các loại tùy chọn để lọc danh sách các tập tin. Ví dụ: -name '*.txt'
chỉ xử lý các tệp kết thúc bằng .txt. -size -2M
có nghĩa là các tệp nhỏ hơn 2 megabyte. -mtime -5
có nghĩa là các tập tin được sửa đổi trong năm ngày qua. Tham gia cùng với -a cho và -o cho hoặc , và sử dụng '('
dấu ngoặc đơn ')'
để biểu thức nhóm (trong dấu ngoặc kép để ngăn vỏ giải thích chúng). Ví dụ:
find / -xdev '(' -type f -a -name '*.txt' -a -size -2M -a -mtime -5 ')' -print0 | xargs -0 grep -H "800x600"
Hãy xem man find
để xem danh sách đầy đủ các bộ lọc có thể.
Permission denied
lỗi? Bạn đã chạy nó như root hoặc người dùng bình thường?