40 ví dụ hay nhất về lệnh Find trong Linux

Spread the love

Lệnh find Linux là một công cụ mạnh cho phép người quản trị hệ thống định vị và quản lý các tệp và thư mục dựa trên nhiều tiêu chí tìm kiếm. Nó có thể tìm các thư mục và tệp theo tên, loại hoặc phần mở rộng, kích thước, quyền, v.v.

Bên cạnh việc định vị tệp và thư mục, việc kết hợp lệnh tìm với các lệnh khác cho phép bạn thực hiện hành động đối với kết quả. Việc thêm tùy chọn -exec cho phép quản trị viên hệ thống chạy các lệnh bên ngoài và thực hiện các hành động như sao chép, di chuyển, xóa hoặc thay đổi quyền của tệp phù hợp với tiêu chí đã chỉ định như kích thước, tên, v.v.

Trong bài viết này, chúng tôi sẽ bắt đầu bằng cách giải thích các lệnh tìm Linux cơ bản với các ví dụ. Điều này sẽ chỉ cho bạn cách tìm tệp và thư mục. Sau đó, chúng tôi sẽ chỉ cho bạn cách sử dụng tùy chọn -exec để thao tác trên các tệp hoặc thư mục dựa trên kích thước, quyền, v.v. của chúng.

Cú pháp chung của lệnh find là

find {path} {name -of-file or dir-to-search} {action-to-take}

Ở đâu,

  • đường dẫn chỉ định thư mục.
  • name-of file or dir-to-search : Tên tập tin hoặc thư mục cần tìm
  • hành động cần thực hiện: chẳng hạn như sao chép, xóa, di chuyển, v.v.

Trong hướng dẫn này, chúng tôi sẽ giải thích cách xác định vị trí các tệp và thư mục phù hợp với các mẫu đã chỉ định. Chúng ta cũng sẽ xem cách thực hiện các hành động trên các tệp hoặc thư mục mà lệnh tìm định vị. Hướng dẫn dựa trên Ubuntu nhưng có thể áp dụng cho hầu hết các bản phân phối và phiên bản Linux.

Mục lục

Tìm tệp và thư mục

Tìm các tệp cụ thể theo tên hoặc phần mở rộng

Để tìm một tệp cụ thể, hãy chạy lệnh sau từ thư mục gốc (/). Lệnh chứa tên chính xác cho tệp bạn đang tìm kiếm.

find . -name file22.txt

đầu ra

./test/file22.txt
./sales/file22.txt

Xin lưu ý rằng kết quả bao gồm đường dẫn. Điều này rất quan trọng nếu bạn không biết thư mục chứa tệp hoặc khi tệp nằm ở nhiều nơi.

Bạn cũng có thể tìm kiếm tệp trong một thư mục khác trong khi vẫn ở vị trí hiện tại. Trong trường hợp này, bạn cần cung cấp đường dẫn cho thư mục mà bạn muốn tìm kiếm.

find ./test -name file22.txt

Tìm kiếm các tập tin cụ thể trong một thư mục khác

Trong trường hợp của chúng tôi, chúng tôi sẽ tìm kiếm tất cả những thứ bắt đầu bằng tệp chữ cái trong thư mục kiểm tra.

find ./test -name file*

đầu ra

./test/file22.txt
./test/file30.doc
./test/file1.txt
./test/file5,doc

Tìm kiếm tệp theo phần mở rộng

Để tìm một tệp trong Linux có phần mở rộng nhất định, hãy thêm tệp đó vào lệnh.

find . -name *.txt

đầu ra

./test/subtest/subfil.txt
./test/file22.txt
./test/file1.txt
./home1/files32.txt
./home2/file22.txt
./qa/tags.txt

Tìm tệp và thư mục theo tên

Sử dụng lệnh bên dưới để tìm các tệp và thư mục bắt đầu bằng các chữ cái qa. Trong máy tính của chúng tôi, chúng tôi có các tệp qatree.txt và qa.txt cũng như một thư mục có tên qa.

  Cách cài đặt Upterm trên Linux

Nếu chúng ta chạy lệnh;

find ./ -name "qa*"

Nó trả về đầu ra sau

./test/qatree.pdf
./test/qa.txt
./home/qa

Lệnh trả về cả tệp và thư mục phù hợp với tiêu chí tìm kiếm. Để chỉ tìm tệp hoặc thư mục, bạn cần chỉ định điều này trong lệnh.

Chỉ tìm tệp hoặc thư mục

Chỉ đối với các tệp, hãy sử dụng công tắc loại f.

chỉ tập tin

find ./ -type f -name "qa*"

đầu ra

./test/qatree.pdf
./test/qa.txt

chỉ thư mục

Thêm tùy chọn loại d để chỉ định vị các thư mục.

find ./ -type d -name "qa*"

đầu ra

./home/qa

Lệnh tìm phân biệt chữ hoa chữ thường

Tất cả các tìm kiếm với khóa chuyển đổi -name đều phân biệt chữ hoa chữ thường và sẽ không đưa ra kết quả bằng chữ in hoa. Để nhận tất cả các trường hợp, hãy sử dụng tùy chọn -iname.

find ./ -iname "qa*"

đầu ra

./test/qatree.pdf
./test/qa.txt
./test/QAtest.txt
./home/qa

Tìm kiếm một tập tin từ nhiều thư mục

Để tìm các tệp trong các thư mục khác nhau, hãy thêm đường dẫn của chúng vào lệnh. Trong trường hợp của chúng tôi, chúng tôi sẽ kiểm tra trong các thư mục kiểm tra và số.

find ./test ./numeric -name file22.txt -type f

đầu ra

./test/file22.txt
/root/numeric/file22.txt

Tìm nhiều tệp có phần mở rộng khác nhau từ tất cả các thư mục

Bạn có thể sử dụng lệnh find để định vị nhiều tệp chia sẻ các phần mở rộng khác nhau, chẳng hạn như *.doc, *.txt *.pdf, v.v. Điều này có thể được thực hiện riêng rẽ, mỗi lần một phần mở rộng hoặc chỉ sử dụng một lệnh bao gồm tất cả các phần mở rộng mong muốn.

tìm thấy . -type f ( -name “*.txt” -o -name “*.pdf” -o -name “*.doc” )

đầu ra

./test/subtest/subfil.txt
./test/qatree.pdf
./test/file22.txt
./test/qa.txt
./test/file30.doc
./books/acro.pdf
./data1/FILE22.txt
./docs/files32.txt

Tìm tệp có chứa văn bản nhất định

Đôi khi, bạn muốn truy cập một tệp chứa văn bản nào đó nhưng không thể nhớ tên tệp hoặc vị trí của nó. Lệnh này cho phép bạn tìm tất cả các tệp chứa văn bản đích của bạn.

Để tìm tất cả các tệp có chứa từ siêu hội tụ”, hãy sử dụng;

find / -type f -exec grep -l -i "hyperconvergence" {} ;

đầu ra

/root/numeric/hci
/root/HCIP

Tùy chọn –i cho phép lệnh bỏ qua các trường hợp và sẽ tìm văn bản dù có viết hoa hay không, tức là siêu hội tụ, Siêu hội tụ, v.v.

Để tìm các tệp trong một thư mục cụ thể, chỉ cần thêm chúng vào lệnh

find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;

đầu ra

./numeric/hci

Khám phá thêm các ví dụ về lệnh grep.

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

Bạn có thể tìm thấy tất cả các tệp hoặc thư mục nhỏ hơn, bằng hoặc lớn hơn một kích thước nhất định, trong một phạm vi nhất định hoặc trống. Sử dụng định dạng kích thước phù hợp tùy thuộc vào loại tệp hoặc thư mục bạn đang tìm kiếm.

tùy chọn kích thước bao gồm;

c – byte

k – kilobyte

M – Megabyte

G – Gigabyte

Tìm tệp có kích thước nhất định – bằng 30MB

Để Tìm kiếm tìm tất cả các tệp 30 MB

find / -size 30M

Tìm tệp lớn hơn kích thước được chỉ định

find -size +2M

đầu ra

. /Downloads/ubuntu18043.iso 
./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c

Tìm tệp nhỏ hơn 10 MB trong thư mục hiện tại

find . -type f -size -10M

Tìm tệp có kích thước trong khoảng 100-200MB

Khi tìm kiếm các tệp trong một phạm vi cụ thể, chẳng hạn như từ 100 đến 200 MB

find / -size +100M -size -200M

Tìm thư mục lớn hơn 20kb

tìm / -type d -size +20k

Tìm các tập tin và thư mục trống.

Các tập tin

tìm ./ -type f -size 0

hoặc

find ./ -type f –empty

thư mục

find ./ -type d –empty

Tìm tệp theo độ tuổi hoặc thời gian sửa đổi

Tìm tệp cũ hơn n ngày

find /path/ -type f -name '*.txt' -mtime +8

-mtime +8 sẽ tìm các tệp txt cũ hơn 8 ngày.

Theo ngày sửa đổi

Điều này sẽ tìm kiếm các tệp được sửa đổi trong vòng 17 giờ qua

find . -mtime -17 -type f 

Tìm kiếm các thư mục được sửa đổi trong vòng 10 ngày qua

find . -mtime -10 -type d 

Tìm tệp dựa trên quyền truy cập hoặc sửa đổi

Tìm tệp dựa trên ngày hoặc thời gian được truy cập. Điều này cho phép bạn xem các tệp đã hoặc chưa được truy cập trong một khoảng thời gian xác định.

Để xem các tệp không được truy cập trong vòng 10 ngày qua trong thư mục chính.

find /home -atime +10

Các tệp được truy cập chính xác 10 ngày trước

find /home -atime 10

Được truy cập trong vòng 10 ngày qua

find /home -atime -10

Tìm các tệp đã sửa đổi trong vòng n ngày qua

Bạn cũng có thể tìm các tệp trong thư mục /home được sửa đổi trong vòng 10 ngày qua bằng lệnh;

find /home -mtime -10 

Tìm các tệp được sửa đổi trong một khoảng thời gian cụ thể.

Ví dụ: tất cả các tệp được sửa đổi từ 6 đến 15 ngày trước trong thư mục chính.

find /home -type f -mtime +6 -mtime -15

Các tệp và thư mục được truy cập trong vòng 10 phút qua

Để tìm các tệp được truy cập trong vòng 10 phút qua, hãy sử dụng tùy chọn -amin.

find . -amin -10 -type f

đầu ra

./.bash_history
./[email protected]:~#

Các thư mục được truy cập trong vòng 10 phút qua

find . -amin -10 -type d

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

cú pháp

$ find -perm mode

Trong đó chế độ là quyền có dạng số như 644, 655, 700, 777, v.v. hoặc các chữ cái như u=x, a=r+x, v.v.

  Cách sử dụng lệnh kiểu Linux

Bạn có thể chỉ định chế độ theo ba cách khác nhau sau đây.

  • Không có tiền tố khi bạn muốn tìm các tệp có quyền chính xác được chỉ định.
  • Với “-“ đối với các tệp có ít nhất quyền được chỉ định. Điều này trả về các tệp có quyền cao hơn được chỉ định cũng như bổ sung.
  • Việc sử dụng “/” yêu cầu chỉ định chủ sở hữu hoặc nhóm có quyền đối với tệp.
  • Tìm tệp có quyền 777

    find -perm 777

    đầu ra

    ./file1

    Tìm tệp có ít nhất 766
    tìm -perm -766

    đầu ra

    ./file2
    ./file1

    Lệnh tìm kiếm tất cả các tệp trong đó

    • Chủ sở hữu tệp có quyền đọc/ghi/thực thi.
    • Nhóm có quyền đọc/ghi
    • Những người khác có quyền đọc/ghi

    Như vậy, nó trả về hai tệp đáp ứng tiêu chí này – tệp1 và tệp2. Các tệp không cần phải có chính xác 766 quyền và có thể có các quyền bổ sung miễn là phải có ít nhất các quyền được chỉ định.

    Tìm tệp có thể ghi của chủ sở hữu

    Bây giờ chúng ta sẽ sử dụng “/” để tìm kiếm các tệp có thể ghi bởi chủ sở hữu hoặc nhóm của chúng hoặc những người khác.

    find -perm /222
    .
    ./file2
    ./file3
    ./file1

    Phần trên tìm kiếm các tệp có thể ghi bởi chủ sở hữu hoặc nhóm của chúng.
    Điều này trả về các tệp có thể ghi bởi một trong hai nhưng không nhất thiết phải là cả hai. Để xem các tệp mà cả hai đều có quyền ghi, hãy sử dụng tiền tố –.

    find -perm -220

    đầu ra

    ./file2
    ./file1

    Tìm tệp do người dùng sở hữu

    Tìm tất cả các tệp thuộc sở hữu của Jack

    find /home -user jack

    đầu ra

    /home/jack
    /home/jack/examples.desktop
    /home/jack/.gnupg
    /home/jack/.gnupg/private-keys-v1.d
    /home/jack/ans.cgi

    Tìm các tệp cụ thể do người dùng sở hữu

    Tìm tất cả các tệp văn bản thuộc sở hữu của Jack

    find /home -user jack -iname "*.txt"

    đầu ra

    /home/jack/docs/file32.txt

    Tìm và liệt kê các tệp và thư mục cùng với quyền của chúng

    find -name "*.conf" | ls -l

    đầu ra

    total 120
    drwxr-xr-x 2 root root 4096 Dec 31 13:19 backup2
    drwxr-xr-x 2 root root 4096 Jan 4 11:57 Desktop
    drwxr-xr-x 2 root root 4096 Dec 31 11:50 Documents
    drwxr-xr-x 2 root root 4096 Dec 31 12:27 Downloads
    -rw-r--r-- 1 root root 0 Jan 4 12:02 file22.doc
    drwxr-xr-x 2 root root 4096 Jan 4 12:14 file23
    -rw-r--r-- 1 root root 0 Jan 4 12:23 file23.txt

    Tìm và hành động dựa trên kết quả

    Trong phần này, chúng ta sẽ xem xét cách bạn có thể thao tác trên các tệp khớp với mẫu được chỉ định trong lệnh tìm.

    Tìm tệp và thay đổi quyền

    Tìm và thay đổi quyền của một số loại tệp nhất định. Trong trường hợp của chúng tôi, chúng tôi sẽ làm việc với các tệp PHP với các quyền khác nhau như được hiển thị bên dưới.

    [email protected]:~/ver$ ls -la
    
    total 8
    drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
    drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
    -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 base.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
    -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 qust.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
    -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 vary.php

    Bây giờ chúng ta sẽ tìm kiếm tất cả các tệp PHP (ở trên) và thay thế quyền của chúng bằng 755

    find ver -name "*.php" -type f -exec chmod 755 {} ;

    Lệnh tìm các tệp PHP trong thư mục ver và sau đó đặt quyền của chúng thành 755 (rwxr-xr-x)

    Kết quả

    [email protected]:~/ver$ ls -la
    total 8
    drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
    drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 base.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 qust.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 vary.php

    Tìm và thay đổi quyền đối với tệp và thư mục

    Tìm tệp có 644 quyền và thay đổi chúng để có 655 quyền

    find . -type f -perm 644 -exec chmod 655 {} ;

    Bạn cũng có thể tìm các thư mục có 644 quyền và thay thế bằng 755.

    find . -type d -perm 644

    đầu ra

    ./docs   

    Thư mục tài liệu có 644 quyền

    drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs

    Để đặt thành 755, chúng tôi chạy

    find . -type d -perm 644 -exec chmod 755 {} ;

    Bây giờ chúng ta có thể kiểm tra lại xem 755 chính xác là gì

    find . -type d -perm 755

    đầu ra
    .
    ./docs

    Từ phía trên, chúng ta có thể thấy thư mục gốc và tài liệu có 755 quyền.

    Lệnh Ls –la cung cấp các chi tiết sau

    drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs

    Tìm và sao chép tệp hoặc thư mục

    Tìm và sao chép một tệp cụ thể vào một thư mục

    Lệnh bên dưới sẽ tìm tệp file22.txt và sao chép nó vào thư mục ~/tmp/images.

    find -iname file22.txt -exec cp {} ~/tmp/images ;

    Tìm và sao chép một loại tệp vào một thư mục

    Để tìm các tệp như hình ảnh có phần mở rộng jpg trong thư mục hiện tại và sao chép chúng sang một vị trí khác như thư mục hình ảnh, hãy sử dụng;

    find -iname '*.jpg' -exec cp {} ~/tmp/images ;

    Thao tác này sẽ tìm và sao chép tất cả các tệp jpg vào thư mục ~/tmp/images.

    Tìm và sao chép một tệp vào nhiều thư mục

    Tìm và sao chép một thư mục vào nhiều thư mục.

    find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;

    Thao tác này sẽ tìm tệp hci và sao chép tệp đó vào ba thư mục /tmp/dir1/ /tmp/dir2/ và $HOME/3/

    Tìm và di chuyển tệp sang một thư mục khác

    Để di chuyển một tệp đã biết từ thư mục này sang thư mục khác. Để di chuyển tệp universal.php;

    find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;

    Tìm kiếm và di chuyển các tệp có phần mở rộng nhất định sang một thư mục khác

    find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;

    Tìm một số tệp nhất định và di chuyển đến một thư mục cụ thể khác

    find -type f -name uni*.* -exec mv {} ~/unifiles/ ;

    Lệnh tìm kiếm tất cả các tệp có tên bắt đầu bằng uni và có bất kỳ phần mở rộng nào. Sau đó nó di chuyển chúng vào thư mục /unifiles/

      Cách tách tệp PDF khỏi thiết bị đầu cuối Linux bằng PDFtk

    Tìm và di chuyển tệp dựa trên độ tuổi

    Tìm và di chuyển các tệp cũ hơn số ngày đã chỉ định đến một vị trí khác, chẳng hạn như kho lưu trữ.

    find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;

    Thao tác này sẽ tìm các tệp pdf cũ hơn 20 ngày và chuyển chúng vào thư mục backup1.

    Tìm và xóa tệp và thư mục

    Cú pháp tìm và xóa tệp hoặc thư mục trong thư mục hiện tại là

    tìm thấy . -type f -name “tệp cần xóa” -exec rm -f {} ; chỉ xóa các tập tin hoặc

    tìm thấy . -type d -name “dir-to-delete” -exec rm -rf {} ; chỉ xóa các thư mục

    Chỉ tìm và xóa các tệp cụ thể

    Để tìm và xóa các tệp bắt đầu bằng til, hãy sử dụng;

    find . -type f -name "til*" -exec rm {} ; 

    Để tìm và xóa các thư mục bắt đầu bằng til

    find . -type d -name "til*" -exec rm {} ;

    Xóa cả tệp và thư mục

    find . -name "til*" -exec rm -rf {} ; 

    Thao tác này sẽ xóa cả tệp và thư mục bắt đầu bằng các chữ cái cho đến khi.

    Xóa theo tiện ích mở rộng

    Dưới đây là cách bạn có thể định vị và xóa tất cả các tệp txt trong thư mục hiện tại. Thay thế txt bằng một phần mở rộng khác, chẳng hạn như bak, pdf hoặc bất kỳ phần mở rộng nào khác mà bạn muốn xóa.

    find . -type f -name "*.txt" -exec rm -f {} ;

    Trong trường hợp bạn muốn hệ thống nhắc xác nhận trước khi xóa từng file thì thêm tùy chọn -i như bên dưới.

    find . -type f -name "*.txt" -exec rm -i {} ;

    đầu ra

    rm: remove regular empty file './File22.txt'? y
    rm: remove regular empty file './file22.txt'? y
    rm: remove regular empty file './file23.txt'?

    Theo mặc định, -rm sẽ không xóa các thư mục và bạn cần sử dụng tùy chọn –r để đảm bảo xóa đệ quy. Điều này đảm bảo xóa các thư mục trống và những thư mục chứa tệp. Tùy chọn -f buộc xóa và được sử dụng cho cả tệp và thư mục.

    Tìm và xóa các tệp cũ hơn n ngày

    Tìm và xóa các tệp sao lưu cũ hơn 20 ngày khỏi thư mục hiện tại.

    find . -type f -name '*.bak' -mtime +20 -exec rm {} ;

    Điều này sẽ xóa tất cả các tệp .bak cũ hơn 20 ngày.

    Chỉ tìm và xóa thư mục

    Để xóa một thư mục có tên là dir22

    find . -type d -name dir22 -exec rm -rf {} ;

    Đảm bảo rằng bạn khớp với trường hợp tên thư mục hoặc sử dụng tùy chọn -iname.

    find . -type d -iname Dir22 -exec rm -rf {} ;

    Loại bỏ cả Dir22 và dir22

    Để xác nhận trước khi xóa, hãy sử dụng tùy chọn -i.

    find . -type d -iname Dir22 -exec rm -rf -i {} ;

    đầu ra
    rm: xóa thư mục ‘./Dir22’? N
    rm: xóa thư mục ‘./dir22’? y

    Trong trường hợp của chúng tôi, chúng tôi đã nhập n cho thư mục Dir22 sẽ không bị xóa và y cho thư mục dir22 hiện sẽ bị xóa.

    Tìm và xóa các tệp trống

    Bạn có thể sử dụng bất kỳ lệnh nào sau đây để xác định vị trí các tệp trống và tự động xóa chúng.

    find ./ -type f -size 0 -exec rm -f {} ;

    hoặc
    tìm ./ -type f -size 0 | xargs rm -f
    hoặc
    tìm ./ -type f -size 0 –delete

    Tìm và xóa các thư mục trống

    Để xóa các thư mục trống, chúng tôi sẽ sử dụng tùy chọn d.

    find ./ -type d -empty -exec rmdir {} ;

    Một cách khác là sử dụng xóa thay vì xóa.

    find ./ -type d -empty -delete

    Xin lưu ý rằng việc xóa các tệp hệ thống hoặc tệp quan trọng khỏi máy tính của bạn có thể làm hỏng hệ điều hành hoặc ứng dụng hoặc dẫn đến mất dữ liệu quan trọng của bạn.

    Để tránh vô tình xóa, cách tốt nhất là sử dụng tài khoản người dùng không phải root. Ngoài ra, hãy đảm bảo rằng bạn đang xóa đúng tệp không hữu ích và bạn có một bản sao lưu tất cả các tệp dữ liệu của mình để đề phòng.

    Cái gì tiếp theo?

    Hãy tiếp tục và thử các lệnh tìm Linux ở trên trong phòng thí nghiệm của bạn hoặc môi trường KHÔNG SẢN XUẤT. Xem liệu bạn có thể sử dụng một số để tự động dọn dẹp hệ thống tệp bằng Crontab hay không. Và, để thành thạo Linux, hãy xem cái này khóa học trực tuyến.

    x