技術文章 · IT 指令工具箱

find、locate、xargs 指令:依名稱、時間、大小找檔案

整理 find 依名稱、類型、時間、大小、權限搜尋,以及 locate、xargs 的安全搭配;包含空白檔名、null 分隔與先預覽再執行。

作者 Steve Chen · 發布  · 約 5 分鐘閱讀

IT 指令工具箱 — 廷皓技術專欄插圖

find 是即時走訪目錄,locate 查的是索引;兩者速度與新鮮度不同。要把搜尋結果交給下一個指令時,檔名中的空白與換行一定要處理。

20 組範例LinuxmacOSGNU/BSD 差異查核日期:2026-08-11
動手前:先用 -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 -print

macOS BSD find 行為與支援度要查當版 man page。

依時間、大小與權限

找 7 天內修改的檔案Linux/macOS

find . -type f -mtime -7 -print

mtime 以 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 -l

GNU -r 可避免空輸入仍執行;BSD xargs 預設行為不同。

平行計算 checksumGNU/BSD xargs

find downloads -type f -print0 | xargs -0 -n 1 -P 4 sha256sum

macOS 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 或系統內建說明確認,再以當版官方文件為準。

聯絡廷皓討論 看更多文章