Linux find 指令完整教學|檔案搜尋、批次操作與進階實務案例
Linux 系統管理與維運中,find 是最常用的檔案搜尋工具之一,可依檔名、大小、修改時間、權限、使用者等條件快速搜尋,對自動化維運與排錯非常重要。
find 指令基本語法與參數
find [搜尋路徑] [條件] [動作]
| 參數 | 用途 | 範例 |
|---|---|---|
| -name | 依檔名搜尋 | find . -name “*.log” |
| -type | 依檔案類型搜尋 | find /home -type f |
| -size | 依檔案大小搜尋 | find / -size +1G |
| -mtime | 依修改時間搜尋 | find /var/log -mtime +30 |
| -user | 依擁有者搜尋 | find /home -user root |
| -iname | 忽略大小寫搜尋 | find . -iname “*.LOG” |
| -empty | 搜尋空檔案或空目錄 | find /path -type f -empty |
| -delete | 直接刪除搜尋結果 | find /tmp -type f -mtime +7 -delete |
| -exec | 對搜尋結果執行指令 | find . -name “*.log” -exec rm {} \; |
實務案例:清理舊檔、打包與搜尋錯誤
案例一:清理 30 天前 log 檔
find /var/log -name "*.log" -mtime +30 -delete # 搜尋 /var/log 中超過 30 天的 log 並刪除
案例二:搜尋大檔案並打包
find /home -type f -size +100M -print0 | tar --null -cvf bigfiles.tar --files-from=- # 將 /home 超過 100MB 的檔案打包
案例三:搜尋 log 內錯誤訊息
grep -r "ERROR" /var/log --include="*.log" # 找出所有 log 中包含 ERROR 的行
案例四:搜尋空檔案或空目錄
find /tmp -type f -empty # 搜尋空檔案
find /tmp -type d -empty # 搜尋空目錄
案例五:搜尋並批次修改權限
find /project -type f -name "*.sh" -exec chmod +x {} + # 將所有 sh 檔案設為可執行
exec 與 xargs 說明與排程自動化
當我們搜尋到一堆檔案,想對它們做操作時可以用 exec 或 xargs:
| 方式 | 說明 | 範例 |
|---|---|---|
| exec | 對每個找到的檔案「逐一執行」指令(\;),或使用 + 批次執行。 |
|
| xargs | 先把找到的檔案收集起來「批次一次執行」指令,速度快,需搭配 -print0 避免空白問題。 |
|
自動化排程範例
每天自動清理 /tmp 超過 7 天的檔案:
#!/bin/bash
# cleanup.sh
find /tmp -type f -mtime +7 -delete
加入 crontab:
0 3 * * * /scripts/cleanup.sh # 每天凌晨 3 點自動執行
FAQ 常見問題
find 與 locate 有什麼差別?
find 直接搜尋檔案系統,結果最準確;locate 使用資料庫搜尋速度快,但可能不是最新檔案。建議排錯或自動化維運時使用 find。
如何搜尋空檔案?
使用 find /path -type f -size 0 搜尋空檔案。
如何搜尋空目錄?
使用 find /path -type d -empty 搜尋空目錄。
如何搜尋大於 1GB 的檔案?
使用 find / -size +1G 搜尋大檔案。
如何安全刪除搜尋結果?
先使用 -print 查看搜尋結果,再使用 -delete,避免誤刪重要檔案。
find 與 grep 如何搭配使用?
使用 grep -r "ERROR" /var/log --include="*.log" 可找出 log 中錯誤訊息。
搜尋速度慢怎麼辦?
縮小搜尋範圍,避免從 / 根目錄開始搜尋,可搭配 xargs 提升效率。
如何搜尋並批次修改檔案權限?
使用 find /project -type f -name "*.sh" -exec chmod +x {} + 可以一次修改多個檔案權限。
