使用萬用字元篩選來源物件

Storage 移轉服務工作支援使用萬用字元 (例如 *?) 的搜尋字串,以比對檔案名稱或路徑。這些搜尋字串稱為 glob 模式。

您可以使用 glob 模式指定要納入移轉作業的來源物件。與單純依前置字元篩選相比,這種做法可提供更精細的控制選項。

從 AWS S3 和 Azure 移轉時,系統支援使用 glob 模式進行篩選。

Glob 語法

glob 模式會使用下列語法比對物件路徑:

語法 說明
? 比對任何單一字元,但 / 除外。
* 比對零個以上的字元,但不包括 /
** 比對零個以上的字元,包括 /
[abc] 比對其中一個字元 (例如 abc)。
[a-z] 比對包含範圍內的一個字元 (例如 az)。
[!abc][^abc] 比對一個字元,但該字元不得為 abc
{abc,xyz} 比對其中一個字串 (例如 abcxyz)。不得包含正斜線 (/) 或雙星號 (**)。
\? 比對反斜線後方的常值字元 (例如,\? 會比對常值 ?)。

範例格式

比對 december 目錄中的所有 .log 檔案:

logs_by_year/**/december/*.log

轉移 data_analytics/ 目錄中開頭不是 . (點) 或 _ (底線) 的所有檔案:

data_analytics/[!._]*

如要讓先前的範例成為遞迴範例:

data_analytics/**/[!._]*

從兩個特定目錄轉移所有 PDF 檔案:

quarterly_reports/2025/{q1-final,q4-final}/*.pdf

指定 glob 模式

建立或更新轉移工作時,可以指定 glob 模式。

gcloud CLI

如要使用 gcloud CLI 依 glob 模式篩選,請將 --match-glob 旗標傳遞至 gcloud transfer jobs creategcloud transfer jobs update 指令:

gcloud transfer jobs create SOURCE DESTINATION \
  --match-glob="GLOB_PATTERN"

範例:

下列指令會建立工作,只從 december 目錄轉移 .log 檔案:

gcloud transfer jobs create s3://my-source-bucket gs://my-sink-bucket \
  --match-glob="logs_by_year/**/december/*.log"

REST

如要使用 REST API 依 glob 模式篩選,請在 transferSpecobjectConditions 中指定 matchGlob 欄位。

{
  "description": "Transfer December logs from all years",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
    "awsS3DataSource": {
      "bucketName": "AWS_SOURCE_NAME",
      "awsAccessKey": {
        "accessKeyId": "AWS_ACCESS_KEY_ID",
        "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
      }
    },
    "gcsDataSink": {
      "bucketName": "DESTINATION_BUCKET"
    },
    "objectConditions": {
      "matchGlob": "logs_by_year/**/december/*.log"
    }
  }
}

詳情請參閱 ObjectConditions 參考資料。

Google Cloud 控制台

Google Cloud 控制台不支援依 glob 模式篩選。

與其他篩選器互動

搭配前置字元篩選器或上次修改時間篩選器使用 glob 模式篩選器時,Storage 移轉服務會依下列順序套用篩選器:

  1. 加入前置字串:縮小要考慮的物件範圍。

  2. 物件條件 (glob 模式和上次修改時間):篩選符合 include 前置字串的物件。物件必須同時符合 glob 篩選器和上次修改時間篩選器,才會納入結果。

  3. 排除前置字串:從結果中移除物件。

進一步瞭解如何依前置字元篩選依上次修改時間篩選

納入前置字串

glob 模式只會套用至符合至少一個 include 前置字串的物件。

如果 glob 模式與所有包含前置字串模式相衝突,Storage 移轉服務會傳回錯誤。

範例:有效組合

  • include_prefix["foo/"]
  • match_glob"foo/bar/**"

結果:有效。這項服務會先列出 foo/ 下的物件,然後將 glob 模式套用至該清單。

範例:有效組合

  • include_prefix["logs/2024/", "logs/2025/"]
  • match_glob"**/*.json"

結果:有效。這項服務會列出 20242025 目錄中的所有物件,然後只轉移以 .json 結尾的檔案。

範例:矛盾

  • include_prefix["foo/"]
  • match_glob"bar/**"

結果:錯誤。match_glob模式無法與 include_prefix 選取的任何物件相符。

排除前置字串

排除前置字串篩選器會納入前置字串篩選器和 glob 模式篩選器之後套用。

系統不會執行矛盾檢查。即使物件符合 glob 模式,只要符合排除前置字串,就會從轉移清單中移除。

範例

  • include_prefix["logs/"]
  • match_glob"**/*.log"
  • exclude_prefix["logs/temp/"]

結果:服務會轉移 logs/ 底下所有以 .log 結尾的物件, logs/temp/ 目錄中的物件除外。