find 是 Linux 最強大的檔案搜尋工具,支援多條件組合、動作執行與格式化輸出。本文系統整理常用語法與實戰範例。
find [路徑] [條件] [動作]
| 需求 | 指令 |
|---|---|
| 完整檔名 | find / -name httpd.conf |
| 部分檔名 (含 srm) | find /etc -name '*srm*' |
| 開頭為 srm | find /etc -name 'srm*' |
| 限定目錄加速 | find /etc -name httpd.conf (比全盤搜尋快) |
find / -name access_log 2>/dev/null
將 stderr 導向 /dev/null 隱藏 Permission denied。
| 條件 | 指令範例 | 說明 |
|---|---|---|
| -size | find / -size +10000000c | 大於 10MB (c=bytes, k=KB, M=MB, G=GB) |
| -amin | find / -amin -10 | 10 分鐘內被存取 |
| -atime | find / -atime -2 | 48 小時內被存取 |
| -mmin | find / -mmin -5 | 5 分鐘內被修改 |
| -mtime | find / -mtime -1 | 24 小時內被修改 |
| -empty | find / -empty | 空檔案或空目錄 |
| -user | find / -user fred | 屬於使用者 fred |
| -group | find / -group dev | 屬於群組 dev |
| -nouser | find / -nouser | 無對應使用者 (UID 不存在) |
| -nogroup | find / -nogroup | 無對應群組 |
# AND:同時符合 find /tmp -size +10M -and -mtime -1 # OR:符合任一 find / -user fred -or -user george # NOT:排除 find /tmp ! -user panda
| 參數 | 用途 | 範例 |
|---|---|---|
| -ls | 顯示詳細資訊 (同 ls -lids) | find / -name "httpd.conf" -ls |
| -exec cmd {} \; | 對每個結果執行指令 | find /tmp -name "*.log" -exec rm -f {} \; |
| -ok cmd {} \; | 執行前逐一確認 | find /tmp -name "*.tmp" -ok rm {} \; |
| -printf "fmt" | 自訂格式輸出 | find / -name "*.c" -printf "%p %s\n" |
| -print0 | 以 null 分隔輸出 (配合 xargs -0) | find / -name "*.bak" -print0 | xargs -0 rm |
# 只搜尋前 2 層目錄 find . -maxdepth 2 -name fred
find /var/log -name "*.log" -mtime +30 -deletefind / -type f -size +100M -exec ls -lh {} \;find /web -type f -exec chmod 644 {} \;find / -xtype l熟練 find 即可掌控檔案系統的每一個角落。