| 選項 | 說明 |
-maxdepth N | 最大遞迴深度 (1=僅當前目錄, 2=含一級子目錄) |
-mindepth N | 最小遞迴深度 (1=跳過當前目錄) |
-mount / -xdev | 不跨越檔案系統邊界 (跳過掛載點) |
-daystart | 時間測試以當天 00:00 為基準,而非 24 小時前 |
-name pattern | 檔案名稱匹配 (支援萬用字元 *, ?, []) |
-iname pattern | 不分大小寫名稱匹配 |
-type c | 檔案類型: f=一般檔案 d=目錄 l=符號連結 c=字元裝置 b=區塊裝置 p=管道 s=socket |
-size n[cwbkMG] | 檔案大小: +n 大於, -n 小於, n 精確; 單位 c=bytes, k=KiB, M=MiB, G=GiB |
-mtime n | 修改時間: +n 超過 n 天, -n n 天內, n 正好 n 天前 (24h 為單位,搭配 -daystart 為日曆天) |
-mmin n | 修改時間以分鐘為單位 |
-user name / -uid n | 擁有者使用者名稱/UID |
-group name / -gid n | 所屬群組名稱/GID |
-perm mode | 權限匹配: -mode (至少包含), /mode (任一位元), mode (精確) |
動作
| 動作 | 說明 |
-print | 預設動作,列印路徑並換行 |
-print0 | 列印路徑以 NULL 字元分隔 (配合 xargs -0 處理含空白檔名) |
-ls | 類似 ls -dils 詳細資訊 |
-delete | 刪除匹配檔案 (隱含 -depth,先處理子目錄) |
-exec cmd ; | 對每個匹配檔案執行 cmd (需以 \; 或 ';' 結尾) |
-exec cmd {} + | 將多個檔案彙整為單一命令執行 (類似 xargs,效率更高) |
-execdir cmd ; | 在匹配檔案所在目錄執行 cmd (安全性較高) |
-ok cmd ; | 執行前詢問確認 |
-prune | 若為目錄則不遞入 (常搭配 -path 排除特定目錄) |
-quit | 立即結束搜尋 |
邏輯運算子 (優先序高→低)
( expr ) 分組
! expr / -not expr 否定
expr -a expr / expr -and expr 邏輯 AND (隱含,並列即 AND)
expr -o expr / expr -or expr 邏輯 OR
expr , expr 序列 (兩者皆執行,回傳第二個結果)
實戰範例精選
# 1. 找出 /var/log 下超過 100MB 的 .log 檔,顯示大小並刪除
find /var/log -name '*.log' -size +100M -ls -delete
# 2. 找出家目錄下 7 天前修改、大於 10MB 的檔案,打包備份
find ~ -mtime +7 -size +10M -exec tar -rvf backup.tar {} +
# 3. 排除 .git 目錄,搜尋專案中所有 .py 檔含有 TODO 關鍵字
find . -path './.git' -prune -o -name '*.py' -exec grep -l TODO {} \;
# 4. 找出系統中 setuid 程式 (潛在提權風險)
find / -type f -perm -4000 -ls 2>/dev/null
# 5. 清理 30 天前未存取的暫存檔
find /tmp -type f -atime +30 -delete
# 6. 將 /data 下所有目錄權限改 755,檔案改 644
find /data -type d -exec chmod 755 {} +
find /data -type f -exec chmod 644 {} +
# 7. 找出擁有者為已刪除使用者的檔案 (UID 無對應帳號)
find / -nouser -o -nogroup -ls
效能提示
- 大量檔案系統優先使用
-maxdepth 限制範圍。
-exec ... + 比 -exec ... \; 快數倍 (減少 fork)。
- 配合
xargs -0 處理 -print0 輸出,安全處理特殊檔名。
- 避免在 / 根目錄下無條件搜尋,指定具體路徑。
copyright ©
萬盛學電腦網 all rights reserved