find 是 Linux 最強大的文件搜索工具,支持按名稱、時間、大小、權限、所有者等多維度組合查找,並可對結果執行任意命令。本文系統整理核心參數、實戰場景及配合 -exec 的自動化技巧。
find [路徑] [表達式]
默認路徑為當前目錄,默認動作為 -print。
| 類別 | 參數 | 說明 |
|---|---|---|
| 時間 | -atime n | n 天前被訪問 |
-mtime n | n 天前被修改 | |
-ctime n | n 天前狀態改變 | |
-amin/-cmin/-mmin n | 分鐘級別對應 | |
-newer file | 比指定文件新 | |
-anewer/-cnewer | 訪問/狀態比文件新 | |
| 名稱/屬性 | -name pattern | 文件名匹配(支持通配符) |
-size n[cwbkMG] | 文件大小(c=字節,k=KB,M=MB,G=GB) | |
-type [bcdpflsD] | 類型:塊/字符設備、目錄、管道、常規文件、符號鏈接、Socket | |
-perm [+-]mode | 權限匹配 | |
-user/-group name | 所有者/組名 | |
| 用戶/組 | -uid/-gid n | 數字 ID |
-nouser/-nogroup | 無對應用戶/組的文件 |
find /var/log -size 0 -exec rm -rf {} \;find / -name "*.log" -mtime -7
find / -user www -size +100M
-exec cmd {} \;:逐個執行(每個文件 fork 一次進程)-exec cmd {} +:批量執行(類似 xargs,高效)-ok cmd {} \;:執行前交互確認find / -type f -name "*.tmp" -exec rm -f {} + # 批量刪除臨時文件
find /home -user nginx -exec chown www:www {} \; # 批量修改所有者