跳至主要内容

掌握 Glob 路徑匹配:語法基礎與實戰應用

· 閱讀時間約 4 分鐘
AIMDX 小編

在程式開發與系統管理中,經常需要批次處理大量檔案或搜尋特定的路徑。此時,「Glob 路徑匹配」(Globbing)便成為了不可或缺的實用技能。無論是操作 Linux 終端機、設定 .gitignore 檔案,還是在 CI/CD 流程中指定建置範圍,Glob 語法都隨處可見。

本文將介紹 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.jpgimage-9.jpg
  • [!a-c].txt[^a-c].txt:使用 !^ 表示反向匹配,匹配除了 a、b、c 以外的字母開頭的文字檔。

5. 大括號 {} (多重模式匹配)

大括號用來提供多種匹配模式的選項,將多個規則組合在一起。

  • *.{jpg,png,gif}:匹配所有 jpg、png 或 gif 圖片檔。
  • src/{components,utils}/*.js:匹配 src/componentssrc/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 模式,將對開發與維護工作帶來實質的效率提升。