Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux 檔案搜尋神器:find 與 locate 進階用法大全

編輯:Linux 系統常見問題解答

找檔案是 Linux 運維的高頻動作。find 走檔案系統、即時精準;locate 查資料庫、秒級模糊。本文系統整理兩者語法、常用參數、組合招與效能取捨,助你精準定位任何檔案。

一、find:即時、精準、可執行動作

基本語法

find [路徑] [運算式] [動作]
# 範例:找 /var/log 下 7 天前、超過 100M 的 .log 檔並刪除
find /var/log -type f -name "*.log" -mtime +7 -size +100M -exec rm -f {} \;

核心測試條件(Test)

參數說明範例
-name pattern檔名匹配(支援萬用字元)-name "*.conf"
-iname pattern忽略大小寫-iname "readme*"
-type f/d/l/c/b/p/s檔案類型:普通/目錄/連結/字元/區塊/管道/socket-type f
-size n[c/k/M/G]大小:+n 大於、-n 小於、n 等於-size +100M
-mtime -n/+n修改時間:n 天內 / n 天前-mtime -7
-atime / -ctime存取時間 / 狀態改變時間-atime +30
-user / -group擁有者 / 群組-user nginx
-perm mode權限匹配-perm -u=x(擁有者可執行)
-nouser / -nogroup無對應帳號/群組清理孤兒檔案
-newer file比參考檔新-newer /etc/passwd
-path / -ipath路徑匹配-path "*/.git/*"
-prune排除目錄(需配合 -o)-path "./node_modules" -prune -o -print

動作

參數說明
-print預設,列印路徑
-ls類似 ls -dils 詳細資訊
-exec cmd {} \;對每個結果執行 cmd({} 為路徑,\; 結尾)
-exec cmd {} +批次執行(較快,參數列長度有限制)
-ok cmd {} \;執行前互動確認
-printf format自訂輸出格式(%p %s %TY-%Tm-%Td %TH:%TM)
-delete直接刪除(隱含 -depth,慎用)

實戰組合招

# 1. 找出佔用空間前 10 大檔案
find / -type f -size +100M -printf "%s %p\n" 2>/dev/null | sort -rn | head -10

# 2. 清理 30 天前的暫存檔(排除 /proc /sys)
find / -type f \( -path /proc -o -path /sys \) -prune -o -atime +30 -name "*.tmp" -print -delete

# 3. 找出含特定字串的檔案(配合 grep)
find /opt/app -type f -name "*.java" -exec grep -l "TODO" {} +

# 4. 修正權限:目錄 755、檔案 644
find /var/www -type d -exec chmod 755 {} \;
find /var/www -type f -exec chmod 644 {} \;

# 5. 找出斷開的符號連結
find / -xtype l -ls 2>/dev/null

二、locate:秒級模糊搜尋

原理

讀取 /var/lib/mlocate/mlocate.db(每日 cron.daily/mlocate 更新),不走磁碟,極快。

常用參數

參數說明
-i忽略大小寫
-r regex正則匹配
-c只顯示計數
-e只顯示現存檔案(需掃描檢查,較慢)
-S顯示資料庫統計

範例

locate -i nginx.conf          # 快速定位設定檔
locate -r '^.*\.pyc$'         # 找所有 .pyc
locate -c passwd              # 計數
updatedb                      # 手動更新資料庫(新建檔案後立即可搜)

三、選擇指南:find vs locate

場景推薦工具理由
剛建立的檔案findlocate 資料庫尚未更新
需按時間/大小/權限/類型過濾findlocate 無此類測試條件
需對結果執行動作(刪/改/壓)findlocate 僅查詢
只記得檔名關鍵字,要秒出結果locate全盤掃描太慢
找斷連結、孤兒檔、特殊類型findlocate 不支援

四、進階替代者:fd / fzf / ripgrep

  • fd:Rust 寫入,語法更簡潔(fd pattern),預設忽略 .gitignore、.hidden,彩色輸出,速度介於 find/locate 之間
  • fzf:模糊互動式搜尋器,配合 find/fd 管線,體驗極佳
  • ripgrep (rg):內容搜尋王者,rg "pattern" 替代 grep -r,支援 .gitignore、多執行緒、PCRE2

結語: find 是瑞士刀,功能最全、可自動化處理;locate 是手電筒,找東西最快;現代工具 fd/rg/fzf 則是強化版手電筒+瑞士刀。建議:日常搜尋用 locate/fd,腳本自動化、複雜條件、需執行動作時上 find。

Copyright © Windows教程網 All Rights Reserved