掌握 Glob 路徑匹配:語法基礎與實戰應用
在程式開發與系統管理中,經常需要批次處 理大量檔案或搜尋特定的路徑。此時,「Glob 路徑匹配」(Globbing)便成為了不可或缺的實用技能。無論是操作 Linux 終端機、設定 .gitignore 檔案,還是在 CI/CD 流程中指定建置範圍,Glob 語法都隨處可見。
本文將介紹 Glob 的基本語法與常見應用場景,以提升檔案篩選與匹配的精準度與效率。

什麼是 Glob?
Glob 是一種基於萬用字元(Wildcard)的模式匹配(Pattern Matching)技術。它的名稱源自於早期的 Unix 版本中一個名為 glob(global 的縮寫)的指令程式。雖然 Glob 與正規表示式(Regular Expression)類似,都能用來匹配字串,但 Glob 的語法更為簡潔直觀,專門為檔案與路徑名稱的匹配所設計。
核心 Glob 語法指南
掌握以下幾個核心符號,就能應付絕大多數的路徑匹配需求:
1. 星號 * (單層目錄匹配)
星號是 Glob 中最常見的符號。它可以匹配任意長度的字元(包含零個字元),但無法跨越目錄層級。
*.txt:匹配目前目錄下所有副檔名為 txt 的檔案(例如:readme.txt,data.txt)。app_*:匹配目前目錄下所有以app_開頭的檔案或資料夾(例如:app_web,app_config.json)。
2. 雙星號 ** (跨層目錄匹配)
雙星號是強大的遞迴匹配符號。它可以匹配任意層級的目錄結構。
**/*.js:匹配所有資料夾與子資料夾中的 JavaScript 檔案。這在前端專案打包或設定 Linter 時非常實用。src/**/test/:匹配src目錄下任何深度中名為test的資料夾。
3. 問號 ? (單一字元匹配)
問號用來精確匹配單一字元。
file_?.txt:可以匹配file_1.txt,file_A.txt,但不能匹配file_12.txt。
4. 方括號 [] (字元集合匹配)
方括號允許定義一個字元集合或範圍,只要字串的該位置符合集合中的任何一個字元即算匹配成功。
[abc].md:匹配a.md,b.md,c.md。image-[0-9].jpg:匹配image-0.jpg到image-9.jpg。[!a-c].txt或[^a-c].txt:使用!或^表示反向匹配,匹配除了 a、b、c 以外的字母開頭的文字檔。
5. 大括號 {} (多重模式匹配)
大括號用來提供多種匹配模式的選項,將多個規則組合在一起。
*.{jpg,png,gif}:匹配所有 jpg、png 或 gif 圖片檔。src/{components,utils}/*.js:匹配src/components和src/utils目錄下的所有.js檔案。
實務應用場景
熟悉基本語法後,Glob 在日常開發中常見的經典用途如下:
設定 .gitignore
在 Git 版本控制中,常使用 Glob 來排除不需要被追蹤的檔案:
# 忽略所有的 node_modules 目錄
node_modules/
# 忽略所有的 .log 檔案
*.log
# 忽略 build 目錄下的所有檔案
build/**
CI/CD 與自動化指令碼
在撰寫 GitHub Actions 或 GitLab CI 配置檔時,定義哪些檔案異動需要觸發部署:
on:
push:
paths:
- 'src/**/*.ts'
- 'src/**/*.tsx'
- '!src/**/*.test.ts' # 排除測試檔
前端開發工具與打包器
在 Webpack、Vite 或 ESLint 等開發工具中,Glob 經常被用來指定要編譯或檢查的來源範圍。
// ESLint 設定範例
module.exports = {
ignorePatterns: ["dist/**/*.js", "node_modules/"],
};
總結
Glob 提供了一種優雅而高效的方式來過濾與尋找檔案。相較於繁雜的迴圈判斷與字串比對,運用正確的 Glob 模式能讓開發流程、配置與腳本變得更為簡練好維護。熟練掌握 Glob 模式,將對開發與維護工作帶來實質的效率提升。