Filtrer les objets sources à l'aide de caractères génériques

Les jobs du service de transfert de stockage sont compatibles avec les chaînes de recherche contenant des caractères génériques tels que * et ? pour correspondre aux noms ou aux chemins d'accès des fichiers. Ces chaînes de recherche sont appelées "expressions glob".

Vous pouvez utiliser des modèles glob pour spécifier les objets sources à inclure dans un transfert. Cela permet un contrôle plus précis que le filtrage par préfixe seul.

Le filtrage avec des expressions glob est compatible avec les transferts depuis AWS S3 et Azure.

Syntaxe Glob

Un modèle glob utilise la syntaxe suivante pour faire correspondre les chemins d'accès aux objets :

Syntaxe Description
? Correspond à n'importe quel caractère, à l'exception de /.
* Correspond à zéro ou plusieurs caractères, à l'exception de /.
** Correspond à zéro ou plusieurs caractères, y compris /.
[abc] Correspond à un seul caractère (par exemple, a, b ou c).
[a-z] Correspond exactement à un caractère dans la plage inclusive (par exemple, de a à z).
[!abc] ou [^abc] Correspond exactement à un caractère qui n'est pas a, b ni c.
{abc,xyz} Correspond à l'une des chaînes (par exemple, abc ou xyz). Ne peut pas contenir de barres obliques (/) ni de doubles astérisques (**).
\? Correspond au caractère littéral après la barre oblique inverse (par exemple, \? correspond à un ? littéral).

Exemples de formats

Faites correspondre tous les fichiers .log des répertoires december :

logs_by_year/**/december/*.log

Transférez tous les fichiers du répertoire data_analytics/ qui ne commencent pas par un . (point) ou un _ (trait de soulignement) :

data_analytics/[!._]*

Pour rendre l'exemple précédent récursif :

data_analytics/**/[!._]*

Transférer tous les fichiers PDF de deux répertoires spécifiques :

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

Spécifier un modèle glob

Vous pouvez spécifier un modèle glob lorsque vous créez ou mettez à jour un job de transfert.

CLI gcloud

Pour filtrer par expression glob à l'aide de la CLI gcloud, transmettez l'option --match-glob à la commande gcloud transfer jobs create ou gcloud transfer jobs update :

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

Exemple :

La commande suivante crée un job qui ne transfère que les fichiers .log des répertoires december :

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

REST

Pour filtrer par expression glob à l'aide de l'API REST, spécifiez le champ matchGlob dans le objectConditions de votre transferSpec.

{
  "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"
    }
  }
}

Pour en savoir plus, consultez la référence ObjectConditions.

Console Google Cloud

Le filtrage par expression glob n'est pas compatible avec la console Google Cloud.

Interaction avec d'autres filtres

Lorsque vous utilisez un filtre de modèle glob avec des filtres de préfixe ou des filtres de date de dernière modification, le service de transfert de stockage applique les filtres dans l'ordre suivant :

  1. Inclure les préfixes : limite les objets à prendre en compte.

  2. Conditions de l'objet (modèle glob et heure de la dernière modification) : filtre les objets correspondant au préfixe d'inclusion. Pour qu'un objet soit inclus dans le résultat, il doit correspondre à la fois au filtre glob et au filtre de date de dernière modification.

  3. Exclure les préfixes : supprime les objets du résultat.

En savoir plus sur le filtrage par préfixe et le filtrage par heure de dernière modification

Inclure les préfixes

Le modèle glob n'est appliqué qu'aux objets correspondant à au moins un préfixe d'inclusion.

Le service de transfert de stockage renvoie une erreur si votre modèle glob contredit tous les modèles de préfixe d'inclusion.

Exemple : combinaison valide

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

Résultat : Valide. Le service liste d'abord les objets sous foo/, puis applique le modèle glob à cette liste.

Exemple : combinaison valide

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

Résultat : Valide. Le service liste tous les objets des répertoires 2024 et 2025, puis ne transfère que les fichiers se terminant par .json.

Exemple : Contradiction

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

Résultat : Erreur. Le format match_glob ne peut correspondre à aucun des objets sélectionnés par include_prefix.

Exclure des préfixes

Le filtre de préfixe d'exclusion est appliqué après le filtre de préfixe d'inclusion et le filtre de schéma glob.

Aucune vérification de cohérence n'est effectuée. Tout objet correspondant à un préfixe d'exclusion est supprimé de la liste de transfert, même s'il correspond au modèle glob.

Exemple

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

Résultat : Le service transfère tous les objets sous logs/ qui se terminent par .log, à l'exception de ceux du répertoire logs/temp/.