find 是即時走訪目錄,locate 查的是索引;兩者速度與新鮮度不同。要把搜尋結果交給下一個指令時,檔名中的空白與換行一定要處理。
動手前:先用 -print 看清單,再加 -exec 或 xargs。刪除、chmod、chown 等批次動作應先縮小路徑與條件,避免從 / 或不確定的變數開始。
依名稱與類型搜尋
依完整檔名搜尋Linux/macOS
find . -type f -name 'config.yml'從目前目錄往下搜尋一般檔案。
忽略大小寫找副檔名Linux/macOS
find . -type f -iname '*.jpg'萬用字元加引號,避免被 shell 提前展開。
只找目錄Linux/macOS
find . -type d -name 'cache'只列目錄,不會刪除或修改。
限制搜尋深度Linux/macOS
find . -maxdepth 2 -type f -name '*.conf'BSD/macOS 也常支援 maxdepth,但可先查 man find。
排除 .git 目錄Linux/macOS
find . -path './.git' -prune -o -type f -print-prune 阻止往 .git 裡走訪。
找空檔案Linux/macOS
find . -type f -empty -print先確認是否真的是異常,不要直接刪。
找斷掉的符號連結GNU find
find . -xtype l -printmacOS BSD find 行為與支援度要查當版 man page。
依時間、大小與權限
找 7 天內修改的檔案Linux/macOS
find . -type f -mtime -7 -printmtime 以 24 小時區段計算,不等於日曆日。
找超過 30 天未修改的 logLinux/macOS
find /var/log -type f -name '*.log' -mtime +30 -print先列出,不要直接接刪除。
找 60 分鐘內修改的檔案Linux/macOS
find . -type f -mmin -60 -print適合追剛剛被更新的設定或輸出。
找大於 100 MiB 的檔案Linux/macOS
find . -type f -size +100M -print不同 find 對 M 的定義可能有差異,必要時搭配 du 驗證。
找權限為 777 的檔案Linux/macOS
find . -type f -perm 0777 -print先確認是不是刻意設定,再調整。
找特定使用者擁有的檔案Linux/macOS
find . -user appuser -print帳號必須在本機可解析。
以參考檔時間為界Linux/macOS
find . -type f -newer baseline.timestamp -print可先 touch baseline.timestamp 建立基準時間。
安全交給下一個指令
逐檔顯示詳細資料Linux/macOS
find . -type f -name '*.conf' -exec ls -l {} \;每找到一個檔案執行一次,清楚但較慢。
批次交給 lsLinux/macOS
find . -type f -name '*.conf' -exec ls -l {} ++ 會把多個路徑合併成較少次執行。
用 null 分隔交給 xargsGNU/BSD
find . -type f -name '*.log' -print0 | xargs -0 ls -lh能正確處理空白、引號與換行檔名。
沒有結果時不執行GNU xargs
find . -type f -name '*.tmp' -print0 | xargs -0 -r ls -lGNU -r 可避免空輸入仍執行;BSD xargs 預設行為不同。
平行計算 checksumGNU/BSD xargs
find downloads -type f -print0 | xargs -0 -n 1 -P 4 sha256summacOS checksum 指令通常是 shasum -a 256;共用主機不要把 P 開太大。
使用 locate 快速查索引Linux
locate '/nginx.conf' | head結果可能過期;找到後再用 ls 或 stat 確認。
怎麼確認有做對
- 先移除 -exec 或 xargs,只看 find 輸出。
- 抽樣用 stat 檢查時間、大小、權限。
- locate 結果要回到檔案系統確認仍存在。
常見錯誤
- 萬用字元沒有加引號。
- 把 find 的一般換行輸出直接交給 xargs,遇到空白檔名就拆錯。
- mtime 的 +1、-1 邊界和直覺不同。
- 從過大的根目錄執行昂貴搜尋,造成 I/O 壓力。
版本與官方文件
參數會隨工具版本與作業系統實作改變。正式環境先用 --help、-h 或系統內建說明確認,再以當版官方文件為準。