Linux find 指令完整使用範例

Linux find 指令完整教學|檔案搜尋、批次操作與進階實務案例

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 說明與排程自動化

當我們搜尋到一堆檔案,想對它們做操作時可以用 execxargs

方式說明範例
exec 對每個找到的檔案「逐一執行」指令(\;),或使用 + 批次執行。
find . -name "*.log" -exec rm {} +
xargs 先把找到的檔案收集起來「批次一次執行」指令,速度快,需搭配 -print0 避免空白問題。
find . -name "*.log" -print0 | xargs -0 rm

自動化排程範例

每天自動清理 /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 {} + 可以一次修改多個檔案權限。

    PAGE TOP