Tìm Kiếm Cơ Bản
Chạy find
find . # list all files recursively find /var/log # search from specific path find . -name "*.txt" # find by name find / -name "config" 2>/dev/null # suppress permission errors find dir1 dir2 -name "*.py" # search multiple directories
Tổng Quan Cú Pháp
find [path...] [tests] [actions]Dạng tổng quát — đường dẫn, tiêu chí, rồi hành động
pathThư mục bắt đầu (mặc định: thư mục hiện tại)
testĐiều kiện lọc file (-name, -type, v.v.)
actionHành động với kết quả khớp (-print, -exec, v.v.)
Default action-print nếu không chỉ định hành động
Mẫu Tên
Khớp Tên
find . -name "*.log" # case-sensitive glob find . -iname "readme*" # case-insensitive glob find . -name "*.py" -o -name "*.js" # OR: Python or JS files find . -path "*/src/*.ts" # match against full path find . -regex '.*\.\(py\|js\)' # POSIX regex on full path
Tiêu Chí Tên
-name patternTên file khớp glob shell (phân biệt hoa thường)
-iname patternTên file khớp glob (không phân biệt hoa thường)
-path patternĐường dẫn đầy đủ khớp glob shell
-ipath patternĐường dẫn đầy đủ khớp glob (không phân biệt hoa thường)
-regex patternĐường dẫn đầy đủ khớp biểu thức chính quy
-iregex patternĐường dẫn đầy đủ khớp regex (không phân biệt hoa thường)
Lọc Theo Loại
Lọc Theo Loại File
find . -type f # regular files only find . -type d # directories only find . -type l # symbolic links find . -type f -name "*.sh" # combine type + name
Các Loại File
-type fFile thông thường
-type dThư mục
-type lSymbolic link
-type bBlock device
-type cCharacter device
-type pNamed pipe (FIFO)
-type sSocket
-emptyFile hoặc thư mục rỗng
Kích Thước & Thời Gian
Ví Dụ Kích Thước & Thời Gian
find . -size +100M # larger than 100 MB find . -size -1k # smaller than 1 KB find . -mtime -7 # modified in last 7 days find . -mmin -30 # modified in last 30 minutes find . -newer reference.txt # newer than reference file
Tiêu Chí Kích Thước & Thời Gian
-size +/-NcKích thước theo byte (c), kilobyte (k), megabyte (M), gigabyte (G)
-mtime +/-NĐược sửa đổi N*24 giờ trước (+cũ hơn, -mới hơn)
-atime +/-NĐược truy cập N*24 giờ trước
-ctime +/-NTrạng thái thay đổi N*24 giờ trước
-mmin +/-NĐược sửa đổi N phút trước
-newer fileĐược sửa đổi gần đây hơn file tham chiếu
-newermt dateĐược sửa đổi sau chuỗi ngày (GNU)
Quyền Truy Cập
Ví Dụ Quyền
find . -perm 644 # exact permissions: rw-r--r-- find . -perm -u+x # user has execute bit set find . -perm /o+w # others have write (any match) find . -user root # owned by root find . -group www-data -type f # owned by group
Tiêu Chí Quyền
-perm modeKhớp quyền chính xác
-perm -modeTất cả bit quyền chỉ định đều được bật
-perm /modeBất kỳ bit quyền chỉ định nào được bật
-user nameThuộc sở hữu của user (tên hoặc UID)
-group nameThuộc sở hữu của group (tên hoặc GID)
-nouserKhông có user khớp trong /etc/passwd
-nogroupKhông có group khớp trong /etc/group
Hành Động
Ví Dụ Hành Động
find . -name "*.log" -print # print paths (default) find . -name "*.tmp" -delete # delete matching files find . -type f -ls # detailed listing find . -name "*.txt" -print0 # null-delimited output find . -type f -printf "%p %s\n" # custom format (GNU)
Tham Khảo Hành Động
-printIn đường dẫn (phân cách bởi newline)
-print0In đường dẫn (phân cách null, an toàn cho xargs)
-lsIn chi tiết file (như ls -dils)
-deleteXóa file khớp (ngụ ý -depth)
-printf formatĐịnh dạng output tùy chỉnh (GNU): %p đường dẫn, %s kích thước, %t thời gian
-fprint fileGhi đường dẫn vào file
-quitThoát sau kết quả đầu tiên
Kết Hợp Tiêu Chí
Toán Tử Logic
find . -name "*.py" -type f # implicit AND find . -name "*.py" -a -size +10k # explicit AND find . -name "*.py" -o -name "*.js" # OR find . ! -name "*.log" # NOT find . \( -name "*.py" -o -name "*.js" \) -type f
Tham Khảo Toán Tử
expr1 expr2 / expr1 -a expr2AND — cả hai phải đúng (mặc định)
expr1 -o expr2OR — một trong hai phải đúng
! expr / -not exprNOT — phủ định biểu thức
\( expr \)Nhóm biểu thức (thoát dấu ngoặc trong shell)
Evaluation orderTrái sang phải; -a liên kết chặt hơn -o
Exec & Delete
Ví Dụ Exec
find . -name "*.sh" -exec chmod +x {} \; find . -name "*.log" -exec rm {} + find . -type f -exec grep -l "TODO" {} + find . -name "*.bak" -ok rm {} \; # prompt before each find . -name "*.tmp" -print0 | xargs -0 rm
Tham Khảo Exec
-exec cmd {} \;Chạy cmd một lần mỗi file ({} = đường dẫn file)
-exec cmd {} +Chạy cmd với nhiều file cùng lúc (nhanh hơn)
-ok cmd {} \;Như -exec nhưng hỏi xác nhận trước
-execdir cmd {} \;Chạy cmd từ thư mục chứa file
xargs -0Dùng kết hợp với -print0 để xử lý hàng loạt an toàn
-deleteXóa file; xử lý từ trong ra ngoài
Độ Sâu & Pruning
Ví Dụ Độ Sâu & Prune
find . -maxdepth 1 -type f # current dir only find . -mindepth 2 -name "*.py" # skip top-level find . -name ".git" -prune -o -print # skip .git dirs find . -depth -name "*.tmp" -delete # process children first
Tùy Chọn Độ Sâu
-maxdepth NĐi xuống tối đa N cấp (0 = chỉ đường dẫn bắt đầu)
-mindepth NKhông áp dụng tiêu chí ở cấp nhỏ hơn N
-depthXử lý nội dung thư mục trước khi xử lý chính nó
-pruneKhông đi sâu vào thư mục khớp
-mount / -xdevKhông vượt qua ranh giới filesystem
-follow / -LTheo dõi symbolic link
Mẫu Phổ Biến
One-Liners
find . -name "*.pyc" -delete # clean Python bytecode find . -type f -size 0 -delete # remove empty files find . -mtime +30 -name "*.log" -delete # purge old logs find . -type f -name "*.md" | wc -l # count Markdown files find . -type d -empty -delete # remove empty dirs
Công Thức
Find largest filesfind . -type f -printf '%s %p\n' | sort -rn | head
Find duplicates by namefind . -type f | awk -F/ '{print $NF}' | sort | uniq -d
Rename extensionfind . -name '*.txt' -exec rename 's/.txt/.md/' {} +
Find broken symlinksfind . -xtype l
Archive recent filesfind . -mtime -7 -print0 | tar czf recent.tar.gz --null -T -
Search code filesfind . -name '*.py' -exec grep -l 'pattern' {} +