40 ví dụ hay nhất về lệnh Find trong Linux
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.
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.
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.
Bạn có thể chỉ định chế độ theo ba cách khác nhau sau đây.
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/
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.