find 用於在目錄階層中搜尋檔案,並可對搜尋結果執行後續動作。
find [路徑] [選項] [動作]
# 預設路徑為當前目錄,預設動作為 -print(輸出至標準輸出)
| 選項 | 功能 | 範例 |
|---|---|---|
| -name 模式 | 依檔名搜尋(支援萬用字元) | -name "*.log" |
| -user 名稱 | 依檔案擁有者搜尋 | -user www |
| -group 名稱 | 依群組搜尋 | -group developers |
| -mtime -n/+n | 依修改時間:-n 表示 n 天內,+n 表示 n 天前 | -mtime -7(一週內修改) |
| -atime -n/+n | 依存取時間 | -atime +30(30 天未存取) |
| -ctime -n/+n | 依狀態改變時間(inode 變更) | |
| -type 類型 | 依檔案類型:f(一般檔)、d(目錄)、l(連結)、b/c(裝置)等 | -type f |
| -size n[c/k/M/G] | 依大小搜尋,預設單位為 512 bytes 區塊 | -size +100M(大於 100MB) |
| -depth | 先處理檔案再處理目錄(適合刪除操作) | |
| -follow | 追蹤符號連結指向的實際檔案 | |
| -prune | 排除特定目錄不搜尋 | -path "./tmp" -prune -o -print |
-a:邏輯 AND(預設隱含)-o:邏輯 OR! 或 -not:邏輯 NOT( ):群組條件(需跳脫 \( \))-print:輸出路徑(預設)-exec 命令 {} \;:對每個結果執行命令,{} 為檔案路徑佔位符-ok 命令 {} \;:執行前提示確認-exec 命令 {} +:批次模式,將多個檔案傳遞給單一命令(效能更好)| 需求 | 指令 |
|---|---|
| 尋找當前目錄所有一般檔案並顯示詳細資訊 | find . -type f -exec ls -l {} \; |
| 刪除 /home 下修改時間超過 5 天的檔案(需確認) | find /home -mtime +5 -ok rm {} \; |
| 查詢今天修改過的檔案 | find / -mtime -1 -exec ls -l {} \; |
| 尋找小於 100KB 的檔案 | find /home -size -100k -exec ls -l {} \; |
| 尋找副檔名 .txt 的所有檔案 | find ~ -name "*.txt" -ok ls -l {} \; |
| 排除 /proc 目錄搜尋全系統 | find / -path "/proc" -prune -o -name "target" -print |
效能提示:大量檔案刪除時,請使用
-exec rm {} +或搭配xargs,避免為每個檔案啟動獨立rm行程。