16 Ví dụ thực tế về lệnh Find của Linux dành cho người mới bắt đầu

theanh

Administrator
Nhân viên
Find là một trong những lệnh Linux được sử dụng thường xuyên nhất và cung cấp rất nhiều tính năng dưới dạng tùy chọn dòng lệnh. Trong hướng dẫn này, dành cho người mới bắt đầu, chúng ta sẽ thảo luận về cách sử dụng cơ bản của lệnh find cũng như một số tùy chọn dòng lệnh hữu ích mà lệnh này cung cấp.

LƯU Ý: Trừ khi có quy định khác, chúng ta sẽ sử dụng các tệp sau cho tất cả các ví dụ liên quan đến lệnh find trong hướng dẫn này.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22500%22%20height=%22123%22%3E%3C/svg%3E

1. Cách liệt kê tất cả các tệp trong thư mục hiện tại và các thư mục con của nó​

Lệnh find cho phép bạn nhanh chóng liệt kê tất cả các tệp trong thư mục hiện tại và các thư mục con của nó. Đối với điều này, tất cả những gì bạn phải làm là chạy lệnh mà không có bất kỳ đối số hoặc tùy chọn nào.
Mã:
find
Đây là đầu ra trong trường hợp của chúng tôi:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22430%22%20height=%22202%22%3E%3C/svg%3E


Tất nhiên, bạn sẽ phải cung cấp đường dẫn đầy đủ nếu thư mục có nội dung bạn muốn liệt kê không phải là thư mục hiện tại của bạn.

2. Cách tìm kiếm tệp theo tên​

Nếu muốn, bạn có thể sử dụng lệnh find để tìm kiếm một tệp cụ thể theo tên của tệp đó. Tùy chọn dòng lệnh -name cho phép bạn thực hiện việc này. Đây là cú pháp:
Mã:
find [dir-path] -name [filename]
Ví dụ, lệnh sau sẽ tìm kiếm thư mục hiện tại để tìm tệp có tên 'testfile1.txt.'
Mã:
find . -name testfile1.txt
Đây là đầu ra


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22440%22%20height=%22110%22%3E%3C/svg%3E


Tương tự, bạn có thể tìm kiếm tệp trong một thư mục khác. Nếu thư mục là thư mục con của thư mục làm việc hiện tại của bạn, thì bạn không cần phải làm gì cả vì lệnh find sẽ tự động tìm kiếm trong tất cả các thư mục con.

Nhưng nếu đó là một thư mục riêng biệt hoàn toàn, thì bạn sẽ phải cung cấp đường dẫn đầy đủ đến thư mục đó. Ví dụ, lệnh sau sẽ tìm kiếm tệp trong thư mục gốc của người dùng:
Mã:
find /home -name testfile1.txt

3. Cách tìm kiếm tệp có loại cụ thể​

Lệnh find cũng cho phép bạn tìm kiếm tệp cùng loại trong một thư mục (và các thư mục con của nó). Ví dụ, lệnh sau sẽ tìm kiếm tất cả các tệp .txt trong thư mục làm việc hiện tại của bạn.
Mã:
find . -name "*.txt"

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22446%22%20height=%22134%22%3E%3C/svg%3E


Trong trường hợp bạn chưa biết, * là ký tự đại diện. Để biết thêm thông tin về các ký tự đại diện, hãy truy cập tại đây.

4. Cách thực hiện tìm kiếm không phân biệt chữ hoa chữ thường​

Theo mặc định, lệnh find thực hiện tìm kiếm phân biệt chữ hoa chữ thường (nó coi các ký tự chữ hoa và chữ thường là khác nhau). Nhưng nếu muốn, bạn có thể buộc lệnh thực hiện tìm kiếm không phân biệt chữ hoa chữ thường. Bạn có thể thực hiện việc này bằng cách sử dụng tùy chọn dòng lệnh -iname.
Mã:
find -iname [filename]
Ví dụ:
Mã:
find -iname testfile1.txt
Đây là kết quả đầu ra


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22440%22%20height=%22120%22%3E%3C/svg%3E

5. Cách chỉ hiển thị những tên không khớp với mẫu tìm kiếm​

Nếu muốn, bạn thậm chí có thể yêu cầu lệnh find in ra những tên tệp không khớp với mẫu tìm kiếm (còn gọi là tìm kiếm đảo ngược). Bạn có thể truy cập tính năng này bằng toán tử ! hoặc -not.

Ví dụ
Mã:
find . -not -name “*.txt”
Đây là đầu ra


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22450%22%20height=%22140%22%3E%3C/svg%3E


Vì vậy, như bạn có thể thấy, tất cả các tệp có phần mở rộng khác với .txt được tạo ra trong đầu ra.

6. Cách giới hạn tìm kiếm ở cấp độ thư mục​

Lệnh find cũng cho phép bạn giới hạn tìm kiếm ở độ sâu thư mục cụ thể. Một tùy chọn dòng lệnh cho phép bạn thực hiện điều này là -maxdepth.

Ví dụ, hãy xem xét cấu trúc thư mục sau:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22500%22%20height=%22246%22%3E%3C/svg%3E


Bây giờ, giả sử, nếu bạn muốn find chỉ tìm kiếm đến thư mục con 'find' (có nghĩa là nó sẽ bỏ qua thư mục con 'howtoforge'), thì bạn có thể sử dụng lệnh sau lệnh:
Mã:
find . -maxdepth 3 -name "*.txt"
Tại đây, '-maxdepth 3' buộc 'find' phải đi vào bên trong và chỉ tìm kiếm ba cấp độ, với cấp độ đầu tiên là thư mục cấp cao nhất (hoặc thư mục đang hoạt động) của bạn.

Sau đây là đầu ra của lệnh:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22467%22%20height=%22160%22%3E%3C/svg%3E


Giống như maxdepth, còn có một tùy chọn khác được gọi là mindepth (cách sử dụng: '-mindepth [N]'). Khi được sử dụng, tùy chọn này sẽ buộc lệnh tìm kiếm đi xuống cấp độ 'N' trước khi bắt đầu hoạt động tìm kiếm

Ví dụ:
Mã:
find . -mindepth 3 -name "*.txt"

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22466%22%20height=%22100%22%3E%3C/svg%3E


Vì vậy, chỉ có các thư mục 'find' trở xuống là đã tìm kiếm.

Tương tự như vậy, nếu bạn muốn tìm kiếm tệp .txt trong các thư mục con nằm giữa cấp 2 và 4, thì bạn có thể sử dụng lệnh sau.
Mã:
find -mindepth 2 -maxdepth 4 -name "*.txt"

7. Hiển thị tất cả các tệp trống​

Nếu muốn, bạn có thể sử dụng lệnh find để hiển thị tất cả các tệp trống trong một thư mục cụ thể (và các thư mục con của nó). Bạn có thể thực hiện thao tác này bằng tùy chọn -empty.

Ví dụ, để hiển thị tất cả các tệp trống trong thư mục làm việc hiện tại của bạn, hãy sử dụng lệnh sau:
Mã:
$ find . -empty

8. Cách tìm kiếm các tệp thuộc về một nhóm cụ thể​

Lệnh find cũng cho phép bạn tìm kiếm các tệp thuộc về một nhóm cụ thể - tùy chọn -group cho phép bạn thực hiện thao tác này. Ví dụ, lệnh sau sẽ liệt kê tất cả các tệp - có trong thư mục làm việc hiện tại và các thư mục con của nó - thuộc về nhóm 'howtoforge'.
Mã:
find . -group howtoforge -name "*.txt"
Đây là đầu ra của lệnh trên trong trường hợp của tôi:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22500%22%20height=%2282%22%3E%3C/svg%3E

9. Cách tìm kiếm các tệp do một người dùng cụ thể sở hữu​

Lệnh find cũng cho phép bạn tìm kiếm các tệp dựa trên quyền sở hữu - tùy chọn -user cho phép bạn thực hiện việc này. Ví dụ, lệnh sau sẽ hiển thị tất cả các tệp .txt (có trong thư mục hiện tại) thuộc sở hữu của người dùng 'himanshu':
Mã:
find . -user himanshu -name "*.txt"

10. Cách tìm kiếm các tệp đã sửa đổi gần đây​

Lệnh find cho phép bạn tìm kiếm các tệp đã sửa đổi gần đây. Bạn có thể thực hiện việc này bằng tùy chọn -mmin. Tùy chọn này yêu cầu bạn phải truyền một số sẽ được coi là số phút.

Ví dụ, nếu bạn muốn tìm kiếm các tệp .txt (trong thư mục hiện tại của bạn) có dữ liệu đã được sửa đổi 1 phút trước, bạn có thể sử dụng lệnh sau:
Mã:
find . -mmin 1 -name "*.txt"

11. Cách tìm kiếm các tệp đã được sửa đổi gần đây hơn một tệp​

Đúng vậy, lệnh find thậm chí còn cho phép bạn tìm kiếm các tệp đã được sửa đổi gần đây hơn một tệp cụ thể. Có thể truy cập tính năng này bằng tùy chọn -newer yêu cầu phải truyền tên tệp (mà bạn muốn so sánh).

Sau đây là một ví dụ:
Mã:
find . -newer ./examples/find/howtoforge/old.txt -name "*.txt"

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22500%22%20height=%22107%22%3E%3C/svg%3E

12. Cách chỉ hiển thị tên thư mục trong đầu ra​

Ngoài ra còn có tùy chọn dòng lệnh cho phép lệnh find chỉ hiển thị tên thư mục trong đầu ra. Tùy chọn đang đề cập là -type và bạn cần truyền d làm giá trị cho nó.

Ví dụ:
Mã:
find -type d
Sau đây là đầu ra của lệnh trên trong trường hợp của chúng tôi:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22407%22%20height=%22132%22%3E%3C/svg%3E


Ngoài d, còn có một số chữ cái khác có thể được truyền làm giá trị cho tùy chọn -type. Để biết về chúng, hãy truy cập trang hướng dẫn của lệnh find.

13. Cách tìm kiếm tệp dựa trên số inode của tệp​

Bạn cũng có thể truyền số inode cho lệnh tìm và yêu cầu lệnh này tìm tên tệp tương ứng (nếu có). Có thể truy cập tính năng này thông qua tùy chọn -inum yêu cầu số inode làm giá trị.

Sau đây là một ví dụ:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22385%22%20height=%2286%22%3E%3C/svg%3E


Mẹo: Bạn có thể tìm số inode của tệp bằng lệnh 'ls -li'.

14. Cách tìm kiếm tệp dựa trên thời gian truy cập gần nhất​

Lệnh find cũng cho phép bạn tìm kiếm tệp dựa trên thời điểm truy cập gần nhất – bạn có thể yêu cầu công cụ hiển thị tệp được truy cập gần nhất 'n' phút trước. Có thể truy cập tính năng này bằng tùy chọn dòng lệnh -amin.

Ví dụ, lệnh sau sẽ tìm kiếm các tệp .txt trong thư mục hiện tại đã được truy cập cách đây 1 phút:
Mã:
find -amin 1 -name "*.txt"

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22407%22%20height=%2239%22%3E%3C/svg%3E

15. sử dụng biểu thức chính quy (regex) với find​

Lệnh find hỗ trợ auhc việc sử dụng biểu thức chính quy. Những biểu thức này có thể được chỉ định bằng tùy chọn dòng lệnh -regex.
Mã:
find ./ -type f -regex '\.\/test[1-2]\.txt'

Biểu thức chính quy này tìm tất cả các tệp bắt đầu bằng từ test, sau đó chứa các số từ 1 đến 2 và kết thúc bằng .txt. Điều quan trọng cần lưu ý trong biểu thức chính quy là "./" là một phần của tệp chứ không chỉ là tên tệp.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22201%22%3E%3C/svg%3E

16. tìm kiếm tệp theo kích thước bằng lệnh find​

Với tùy chọn dòng lệnh -size, bạn có thể tìm kiếm tệp theo kích thước. Ví dụ, nếu bạn muốn tìm các tệp lớn hơn 100 MB, hãy sử dụng lệnh sau:
Mã:
find ./ -type f -size +100M
Bạn có thể sử dụng các đơn vị kích thước sau:

K = kilobyte
M = megabyte
G = gigabyte

Vì vậy, bạn có thể dễ dàng tìm thấy các tệp lớn trong Linux.

Kết luận​

Các ví dụ được đề cập trong hướng dẫn này sẽ cung cấp cho bạn ý tưởng hay về cách lệnh find hoạt động ở cấp độ cơ bản, cũng như về một số tùy chọn dòng lệnh hữu ích mà nó cung cấp. Hãy thử các ví dụ này trên hệ thống của bạn và cũng xem qua trang hướng dẫn của công cụ.
 
Back
Bên trên