Tin tức và phân tích của tất cả các thiết bị di động

Hơn 10 cách sử dụng lệnh find trong Linux

Bạn đã bao giờ thấy mình điên cuồng tìm kiếm một tập tin quan trọng, chỉ để nhận ra rằng bạn đã lãng phí nhiều giờ để cố gắng tìm kiếm trong mọi thư mục nhưng không tìm thấy tập tin đó ở đâu cả? Chà, đây là một vấn đề phổ biến mà hầu hết người dùng Linux đều gặp phải, đặc biệt là những người dùng mới có số lượng lớn các tệp và thư mục vô tổ chức. Trong bài viết này, chúng tôi giải thích cách bạn có thể tìm kiếm tệp và thư mục theo nhiều cách khác nhau bằng cách sử dụng lệnh find trong Linux.

Lệnh tìm trong Linux là gì

Lệnh find là một trong những công cụ quan trọng nhất giúp người dùng Linux tìm kiếm các tập tin và thư mục của họ với nhiều tùy chọn khác nhau. Bạn thậm chí có thể thực thi các lệnh shell trên các mục tìm kiếm được trả về (sẽ nói thêm về nó sau!). Cú pháp tìm kiếm file và thư mục bằng lệnh find là:

find <options> <location> <expression>

Đây là cách chúng tôi sẽ giải thích cú pháp trên:

  • là các tùy chọn khác nhau được sử dụng để tinh chỉnh tìm kiếm
  • chỉ định vị trí trong bộ nhớ để lệnh find tìm kiếm
  • chỉ định mục tìm kiếm cần tìm

Một số tùy chọn phổ biến để ghép nối với lệnh find là:

Tùy chọnMô tả
-tênTùy chọn này được sử dụng để chỉ định tên của tệp hoặc thư mục.
-kiểuĐiều này chỉ định loại mục cần tìm.
-execCờ exec được sử dụng để thực thi các lệnh shell trên đầu ra.
-kích cỡCờ này lọc các mục dựa trên kích thước chiếm dụng bộ nhớ của chúng.
-uốnCờ này lọc các tập tin và thư mục dựa trên quyền của chúng.
-người dùngCờ này được sử dụng để tìm kiếm các tập tin và thư mục thuộc sở hữu của một người dùng cụ thể.

Cách tốt nhất để sử dụng lệnh find trong Linux

Cách phổ biến nhất để tìm kiếm tệp và thư mục bằng lệnh find trong Linux là sử dụng tên tương ứng của chúng. Nếu bạn không biết chính xác tên tệp, lệnh find rất linh hoạt có thể được sử dụng để tìm kiếm tệp ngay cả khi chỉ có một phần tên.

1. Tìm các tệp cụ thể có tên trùng khớp

Để tìm kiếm tập tin và thư mục bằng lệnh find, hãy sử dụng cờ -iname. Lợi ích của việc tìm kiếm bằng cờ này là nó sẽ tìm kiếm tên đã cho mà bỏ qua chữ hoa chữ thường của tên tệp. Cú pháp sử dụng lệnh find với cờ -iname là:

find <location> -iname <search_name>

Ví dụ: nếu bạn muốn tìm kiếm tệp “test.txt” trong thư mục hiện tại, hãy sử dụng lệnh này:

find . -iname "test.txt"

Ở đây, ‘.’ đại diện cho thư mục hiện tại theo chế độ địa chỉ tương đối cho vị trí tệp. Bạn thậm chí có thể sử dụng chế độ địa chỉ tuyệt đối cho vị trí tệp thay thế nếu bạn thấy khó hiểu chế độ tương đối.

Cờ “-iname” sẽ bỏ qua trường hợp tên tệp. Để tìm kiếm tên tệp khớp chính xác với tên tệp, chỉ cần thay thế cờ -iname bằng cờ -name:

find <location> -name <name_to_search>

2. Tìm tệp theo mẫu tên trong Linux

Đôi khi bạn cần làm việc với một file quan trọng nhưng lại không thể nhớ được tên đầy đủ của file. Ngay cả trong tình huống này, lệnh find có thể là cứu tinh của bạn. Chỉ cần sử dụng ký tự đại diện để khớp với mẫu tên tệp của bạn. Sau đó, các ký tự đại diện sẽ cố gắng khớp mẫu đã cho với tất cả các tên có sẵn. Giả sử bạn cần tìm file “test-101.py” trong thư mục hiện tại, bạn có thể sử dụng lệnh sau:

Điều này sẽ liệt kê các tệp khác nhau bắt đầu bằng tên ‘test’ trong tên tệp của chúng như hiển thị bên dưới:

find . -type f -iname "test*"

Ở đây, loại f được thêm vào để chỉ định loại mục tìm kiếm dưới dạng tệp. Ngoài ra, hãy đảm bảo sử dụng biểu thức ký tự đại diện trong một cặp dấu ngoặc kép để tránh bất kỳ lỗi nào.

3. Tìm tệp hoặc thư mục có tên trùng khớp

Nói chung, lệnh find tìm kiếm tất cả các tệp và thư mục khớp với tên. Để chỉ tìm kiếm các tệp, hãy sử dụng tùy chọn “-type f” với cú pháp cơ bản:

find <location> -type f -name <name_to_search>

Ví dụ: lệnh sau sẽ hiển thị tất cả các tệp có tên “test”:

find . -type f -iname "test*"

Để chỉ tìm kiếm các thư mục, hãy sử dụng cờ “-type d” như:

find <location> -type d -iname <name_to_search>

Ví dụ: lệnh sau sẽ hiển thị tất cả các thư mục có tên “test”:

find . -type d -iname "test*"

4. Tìm tệp có phần mở rộng cụ thể

Với sự kết hợp chết người giữa các ký tự đại diện và lệnh tìm kiếm, bạn thậm chí có thể tìm kiếm các tệp dựa trên phần mở rộng của chúng. Ví dụ: nếu bạn cần tìm kiếm tệp cấu hình trong thư mục hiện tại nhưng không biết tên chính xác, bạn có thể sử dụng lệnh:

find . -iname "*.conf"

5. Tìm tệp và thư mục dựa trên kích thước

Khi kết hợp với bộ mô tả kích thước phù hợp, bạn có thể sử dụng lệnh find với cờ -size để tìm các tệp và thư mục trong Linux dựa trên kích thước của chúng chiếm trong bộ nhớ. Ngoài ra, các bộ mô tả kích thước khác nhau cũng có thể được thêm vào để chỉ định giới hạn kích thước tệp cần tìm kiếm.

Cú pháp cơ bản để tìm tệp trong Linux dựa trên kích thước là:

find <location> -type <search_item_type> -size <symbol><file_size><size_descriptor>

Cú pháp trên giống như các cú pháp trước, ngoại trừ phần “-size ”. Đây là lời giải thích cho phần này:

  • Đối với phần bạn có thể chỉ định ‘+’ hoặc ‘-‘ hoặc thậm chí để trống. Ở đây, ‘+’ có nghĩa là tìm kiếm các tệp/thư mục vượt quá kích thước nhất định và ‘-‘ chỉ định tìm các tệp/thư mục có kích thước nhỏ hơn kích thước nhất định. Nếu nó được để trống thì lệnh find sẽ tìm kiếm các tệp có kích thước chính xác.
  • chỉ định kích thước của tệp/thư mục.
  • đề cập đến phạm vi kích thước tệp bạn muốn tìm.

Các loại mô tả kích thước khác nhau mà bạn có thể sử dụng là:

Mô tả kích thướcMô tả
cChỉ định lệnh tìm để tìm kích thước theo byte
kChỉ định lệnh tìm để tìm kích thước tính bằng kilobyte
MChỉ định lệnh tìm để tìm kích thước tính bằng megabyte
GChỉ định lệnh tìm để tìm kích thước tính bằng gigabyte

Cú pháp trên có vẻ rất phức tạp đối với một số người dùng, nhưng một số ví dụ sẽ giúp bạn dễ hiểu hơn.

  • Nếu bạn cần xem các thư mục bằng 4 kB trong thư mục Documents, sử dụng lệnh này:
find ~/Documents -type d -size 4k
  • Hoặc nếu bạn sắp hết dung lượng và cần xem các tệp vượt quá 100 MB trong thư mục Documents, sử dụng lệnh này:
find ~/Documents -type f -size +100M
  • Nếu bạn cần xem các tập tin nhỏ hơn 10 MB trong thư mục Documents, sử dụng lệnh này:
find ~/Documents -type f -size -10M
  • Nếu bạn cần xem các tệp trống trong thư mục Tài liệu, hãy sử dụng lệnh này:
find ~/Documents -type f -size 0

6. Tìm tệp và thư mục phù hợp với quyền cụ thể

Các quyền trong Linux là vô cùng quan trọng trong Linux để bảo vệ cả tệp và thư mục khỏi bị truy cập ngoài ý muốn. Để biết thêm, hãy xem hướng dẫn toàn diện của chúng tôi về quyền Linux.

Để tìm tệp và thư mục dựa trên bộ quyền, hãy sử dụng cú pháp sau:

find <location> -type <search_item_type> -perm <permission_set>

Trong cú pháp trên, bạn có thể sử dụng chế độ đánh địa chỉ tuyệt đối hoặc chế độ tương đối cho .

Giả sử bạn cần tìm các tệp có quyền chỉ đọc cho root, hãy sử dụng lệnh này:

find ~/Documents/test/ -type f -perm 400

Hoặc nếu bạn muốn tìm file có cả quyền đọc và quyền ghi cho tất cả người dùng, hãy sử dụng lệnh này:

find ~/Documents/test/ -type f -perm a=r+w

7. Tìm tệp và thư mục do người dùng sở hữu

Như chúng tôi đã giải thích trước đây, bạn có thể tìm kiếm tệp dựa trên các quyền được đặt cho tệp bằng lệnh find trong Linux. Bây giờ chúng tôi sẽ chỉ cho bạn cách xem các tệp thuộc sở hữu của một người dùng cụ thể. Cú pháp cơ bản hầu như vẫn giữ nguyên ngoại trừ cờ -user mới chỉ định lệnh find để tìm kiếm các tệp thuộc sở hữu của người dùng đó:

 find <location> -type <search_item_type> -user <username>

Ví dụ: nếu bạn muốn xem các tệp thuộc sở hữu của người dùng ‘test’ trong thư mục hiện tại, hãy sử dụng lệnh này:

find . -type f -user test

8. Sử dụng lệnh find với cờ -exec

Với cờ -exec, bạn có thể thực thi các lệnh shell thực tế bằng lệnh find và do đó tăng cường các chức năng của nó lên nhiều lần. Cờ -exec thực thi các lệnh shell trên mọi kết quả tìm kiếm được trả về. Cú pháp cơ bản để sử dụng lệnh find với cờ -exec là:

find <location> <options> -exec <shell_command> {} ;

Trong cú pháp trên, {} được sử dụng để đưa vào các kết quả tìm kiếm được tìm thấy bởi lệnh find bên trong lệnh shell. Một ví dụ sẽ làm cho nó rõ ràng hơn.

Giả sử bạn muốn sao chép một tệp có tên test.txt bên trong thư mục hiện tại vào /tmp/docs/, hãy sử dụng lệnh này:

find . -iname renaming.sh -exec cp {} ./testing \;

Trong ví dụ trên, khi tìm thấy tệp “renaming.sh”, nó sẽ được cắm trực tiếp vào vị trí của “{}” nơi thực hiện quy trình sao chép thông thường. Dấu chấm phẩy cuối cùng (;) phân định sự kết thúc của lệnh.

Bây giờ chúng ta hãy xem cờ -exec xử lý nhiều tệp như thế nào. Giả sử bạn muốn di chuyển tất cả các tệp .pdf trong thư mục hiện tại sang thư mục mới có tên “ftesting” trong thư mục chính, bạn có thể sử dụng lệnh này:

find .-name "*.pdf" -exec mv {} ./testing + \;

Nếu bạn muốn đổi tên bằng lệnh mv, hãy xem bài viết của chúng tôi về cách đổi tên tệp trong Linux, nơi chúng tôi đã thảo luận về bốn phương pháp khác nhau để đổi tên tệp.

9. Tìm và xóa tập tin và thư mục trong Linux

Đôi khi bạn có thể cần xóa các tệp/thư mục cụ thể trong Linux. Bạn sẽ nghĩ rằng cần phải viết một tập lệnh shell phức tạp cho nó. Tuy nhiên, với sức mạnh của lệnh -exec, bạn có thể dễ dàng xóa các tập tin hoặc thư mục được lọc bởi lệnh find dựa trên các quy tắc đã chỉ định. Cú pháp cơ bản để xóa file bằng lệnh find là:

find <location> <options> -type <search_item_type> -exec rm -vf {} ;

Một số người dùng có thể thấy lệnh trên khó nắm bắt. Để đơn giản hơn, bạn có thể sử dụng cờ -delete thay vì toàn bộ phần -exec để xóa các mục. Cú pháp xóa file bằng cờ -delete bằng lệnh find trong Linux là:

find <location> <options> -type <search_item_type> -delete

Xóa tệp và thư mục với tên chính xác

Xóa một tập tin/thư mục hoạt động giống như sử dụng lệnh find để tìm kiếm nó. Cú pháp xóa file bằng find là:

find <location> <options> -type <search_item_type> -name <file_to_delete> -delete

Giả sử bạn muốn xóa tệp “test.txt” trong thư mục hiện tại, bạn có thể sử dụng lệnh này như:

find . -type f -name test.txt -delete

Xóa các tệp có tên khớp một phần

Nếu bạn xóa một tệp và tất cả những gì bạn có thể nhớ là một phần của tên thì bạn có thể sử dụng ký tự đại diện để tìm tất cả các loại tên trùng khớp với tên tệp đã cho. Cú pháp xóa file và thư mục có một phần tên bằng lệnh find trong Linux là:

find <location> <options> -type <search_item_type> -name <name_with_wildcard> -delete

Ví dụ: để xóa tất cả các tệp bắt đầu bằng tên “test”, hãy sử dụng lệnh này:

find . -type f -name "test*" -delete

Xóa các tệp có cùng phần mở rộng

Khi cần xóa tất cả các file có cùng phần mở rộng trong một thư mục, tất cả những gì bạn cần làm là thêm cờ -delete vào cuối. Cú pháp xóa tất cả các file có phần mở rộng giống nhau là:

find <location> -type f -name "*.<extension>" -delete

Ví dụ: nếu bạn muốn xóa tất cả các tệp .pdf trong thư mục hiện tại, bạn có thể sử dụng lệnh này:

find . -type f -name "*.pdf" -delete

Nếu bạn muốn biết thêm các cách xóa tệp và thư mục trong Linux, hãy xem các bài viết về cách xóa tệp trong Linux và cách xóa thư mục trong Linux. Chúng tôi khuyên bạn nên luôn chạy lệnh tìm trước tiên mà không xóa cờ. Khi bạn hài lòng với kết quả, bạn có thể áp dụng cờ -delete để xóa các mục cuối cùng.

Xóa các tập tin và thư mục trống bằng lệnh find

Xóa các tập tin và thư mục trống khá đơn giản. Chỉ cần thêm cờ -delete vào cuối lệnh để tìm các thư mục và tệp trống trong Linux. Cú pháp xóa file và thư mục trống là:

find <location> -type <search_item_type> -size 0 -delete