find là một lệnh để lọc đệ quy các đối tượng trong hệ thống tập tin dựa trên các điều kiện đơn giản. Sử dụng lệnh find để tìm kiếm một tập tin hoặc thư mục trên hệ thống tập tin của bạn. Sử dụng tùy chọn -exec, các tập tin có thể được tìm thấy và ngay lập tức xử lý trong cùng một dòng lệnh. Tìm các tập tin theo tên hoặc phần mở rộng Sử dụng find từ dòng lệnh để xác định vị trí một tập tin cụ thể theo tên hoặc phần mở rộng như(.odt, .mp4, .mkv, .docx...). Ví dụ sau đây tìm kiếm các tập tin * .err trong thư mục /home/username/ bao gồm cả tập tin và các thư mục con: Mã: find /home/username/ -name "*.err" Các lệnh find phổ biến và cú pháp Lệnh find có dạng sau: Mã: find options starting/path expression Thuộc tính options sẽ kiểm soát hành vi và tối ưu hóa phương pháp của quá trình tìm kiếm. Thuộc tính starting/path sẽ xác định thư mục cấp cao nhất mà lệnh find bắt đầu lọc. Thuộc tính expression kiểm soát các test mà tìm kiếm hệ thống phân cấp thư mục sử dụng để đưa ra kết quả. Hãy xem xét lệnh ví dụ sau đây: Mã: find -O3 -L /var/www/ -name "*.html" Lệnh này cho phép mức độ tối ưu hóa tối đa (-03) và cho phép tìm theo các liên kết symbolic (-L). Tìm tìm kiếm toàn bộ cây thư mục nằm trong thư mục /var/www/ cho các tập tin với phần mở rộng .html. Một số ví dụ Mã: find . -name testfile.txt Tìm một tập tin gọi là testfile.txt trong thư mục hiện tại và thư mục con. Mã: find /home -name '*.jpg Tìm tất cả các file .jpg trong thư mục /home và thư mục con. Mã: find . -type f -empty Tìm một tập tin rỗng trong thư mục hiện tại. Mã: find /home -user exampleuser -mtime 7 -iname ".db" Tìm tất cả các file .db (bỏ qua trường hợp văn bản) được sửa đổi trong 7 ngày trước đó bởi một người dùng có tên exampleuser. Các tùy chọn và tối ưu hóa cho lệnh find Cấu hình mặc định cho lệnh find sẽ bỏ qua các symbolic (tập tin shortcut). Nếu bạn muốn tìm thêm các liên kết symbolic, bạn có thể thêm tùy chọn -L đến lệnh, như trong ví dụ trên. find tối ưu hóa bộ lọc của nó để tăng hiệu suất. Ba mức độ tối ưu hóa sử dụng có thể lựa chọn như -O1, O2 và O3. Việc tối ưu hóa -O1 là mặc định và bắt buộc lệnh find lọc dựa trên tên file trước khi chạy tất cả các xét thử nghiệm khác. Tối ưu hóa ở -O2 ưu tiên lọc tên file, như ở -O1, và sau đó chạy tất cả các loại tập tin lọc trước khi tiếp tục với điều kiện khác. Tối ưu hóa O3 cho phép find thực hiện tối ưu hóa lớn nhất và sắp xếp lại tất cả các thử nghiệm dựa vào việc sử dụng hiệu quả các nguồn lực và khả năng thành công của chúng. Một số tùy chọn: -01 (Default) bộ lọc dựa trên tên tập tin đầu tiên. -02 Tên tập tin đầu tiên, sau đó đến các loại tập tin khác. -03 Cho phép find tự động sắp xếp lại các tìm kiếm dựa vào việc sử dụng hiệu quả các nguồn lực và khả năng. thành công -maxdepth X Tìm kiếm thư mục hiện tại cũng như tất cả các thư mục con ở cấp độ sâu X. -iname Tìm kiếm không phân biệt đối với trường hợp văn bản. -not Đưa ra kết quả đối với trường hợp không phù hợp với các thử nghiệm. -type f Tìm kiếm cho các tập tin. -type d Tìm kiếm các thư mục. Tìm các tập tin bằng thời gian sửa đổi Lệnh find chứa khả năng lọc hệ thống phân cấp thư mục dựa trên khi tập tin được sửa đổi lần cuối: Mã: find / -name "*conf" -mtime 7 find /home/exampleuser/ -name "*conf" -mtime 3 Lệnh đầu tiên trả về một danh sách tất cả các tập tin trong toàn bộ hệ thống tập tin mà có tên kết thúc bằng conf và đã được sửa đổi trong 7 ngày trước đó . Lệnh lọc thứ hai trả về một danh sách tất cả các tập tin trong thư mục /home/exampleuser/ mà có tên kết thúc bằng conf và đã được sửa đổi trong 3 ngày trước đó . Sử dụng Grep để tìm các tập tin dựa trên nội dung Lệnh find chỉ có thể lọc phân cấp thư mục dựa vào tên của một tập tin và dữ liệu. Nếu bạn cần phải tìm kiếm dựa trên nội dung của các tập tin, sử dụng một công cụ như grep. Hãy xem xét ví dụ sau: Mã: find . -type f -exec grep "example" '{}' \; -print Điều này tìm kiếm mọi đối tượng là tập tin trong thư mục hiện tại (.) và sau đó chạy các lệnh grep "example" cho mỗi tập tin đáp ứng các điều kiện của lệnh find. Các tập tin mà phù hợp với cả 2 lệnh sẽ được in trên màn hình (-print). Dấu ngoặc nhọn ({}) là một phần giữ chỗ cho các kết quả đúng của lệnh find. Dấu ngoặc nhọn {} được kèm theo trong dấu nháy đơn ( ') để tránh lệnh grep thực hiện trên một tên tập tin bị thay đổi. Lệnh -exec được kết thúc bằng một dấu chấm phẩy (, và được thêm kí tự \ (\ để tránh việc liên quan đến shell. Trước khi thực hiện tùy chọn -exec, lcó thể sử dụng lệnh xargs để tạo ra một kêt quả đầu ra tương tự: Mã: find . -type f -print | xargs grep "example" Làm thế nào để tìm và xứ lý tập tin đồng thời khi sử dụng lệnh find Tùy chọn -exec chạy các lệnh đối với mọi đối tượng phù hợp với lệnh find. Hãy xem xét ví dụ sau: Mã: find . -name "rc.conf" -exec chmod o+r '{}' \; Bộ lọc này sẽ tìm ra tất cả các tập tin được đặt tên rc.conf trong thư mục hiện hành bao gồm cả thư mục con và chạy lệnh chmod o+r để cấp quyền cho các tập tin tìm thấy bởi lện find.. Sử dụng -execdir để thực hiện lệnh quy định trong thư mục mà các kết quả đúng năm ở đó. Điều này có thể làm giảm bớt lo ngại an ninh và tăng hiệu suất nhiều hơn cho một số hoạt động. Các tùy chọn exec hoặc -execdir chạy mà không cần nhắc nhở thêm. Nếu bạn muốn được nhắc nhở trước khi hành động được thực hiện, thay thế -exec với -Ok hoặc -execdir với -okdir. Làm thế nào để tìm và xóa tập tin trong lệnh find Thêm các tùy chọn -delete đến cuối của một biểu thức phù hợp để xóa tất cả các tập tin phù hợp. Sử dụng tùy chọn này khi bạn chắc chắn rằng kết quả chỉ phù hợp với các tập tin mà bạn muốn xóa. Trong ví dụ này, tìm và xóa tất cả các tập tin có phần mở rộng .bak trong thư mục hiện tại bao gồm thư mục con: Mã: find . -name "*.bak" -delete