Caratteri jolly URI

Google Cloud CLI supporta l'utilizzo di caratteri jolly URI per file, bucket, e oggetti. I caratteri jolly ti consentono di lavorare in modo efficiente con gruppi di file che corrispondono a pattern di denominazione specificati. Questa pagina descrive i caratteri jolly supportati e riporta considerazioni importanti sull'utilizzo dei caratteri jolly nei comandi.

Caratteri jolly

gcloud CLI supporta i seguenti caratteri jolly:

Basato su caratteri Descrizione
* Corrisponde a zero o più caratteri all'interno del livello di directory corrente. Ad esempio, cp gs://my-bucket/abc/d* corrisponde all'oggetto abc/def.txt, ma non all'oggetto abc/def/g.txt. Nel caso di comandi di elenco come ls, se un * finale corrisponde a una sottodirectory nel livello di directory corrente, vengono elencati anche i contenuti della sottodirectory.
** Trova zero o più caratteri oltre i limiti della directory. Se utilizzata all'interno di un percorso file locale, la sostituzione ** deve sempre essere preceduta immediatamente da un delimitatore di directory. Ad esempio, my-directory/**.txt è valido, ma my-directory/abc** non lo è.
? Deve corrispondere a un singolo carattere. Ad esempio, gs://bucket/??.txt trova corrispondenze solo per oggetti con esattamente due caratteri seguiti da .txt.
[CHARACTERS] Corrisponde a uno qualsiasi dei caratteri specificati. Ad esempio, gs://bucket/[aeiou].txt trova corrispondenze con oggetti che contengono un singolo carattere vocale seguito da .txt.
[CHARACTER_RANGE] Deve corrispondere a uno qualsiasi degli intervalli di caratteri. Ad esempio, gs://bucket/[a-e].txt corrisponde agli oggetti che contengono la lettera a, b, c, d o e seguita da .txt.

Puoi combinare caratteri jolly per fornire corrispondenze più efficaci, ad esempio:

gs://*/[a-m]??.j*g

Tieni presente che, a meno che il comando non includa un flag per restituire versioni non correnti degli oggetti nei risultati, questi caratteri jolly corrispondono solo alle versioni degli oggetti attivi.

gcloud CLI supporta gli stessi caratteri jolly sia per l'oggetto che per il file i nomi degli utenti. Pertanto, ad esempio:

gcloud storage cp data/abc* gs://bucket

trova la corrispondenza con tutti i file che iniziano con abc nella directory data del file file system in-app.

Considerazioni sul comportamento

Esistono diversi casi in cui l'utilizzo di caratteri jolly può portare a un comportamento sorprendente:

  • Quando si utilizzano caratteri jolly nei nomi dei bucket, le corrispondenze sono limitate ai bucket in un singolo progetto. Molti comandi ti consentono di specificare un progetto utilizzando flag. Se un comando non include un flag di progetto o non supporta l'utilizzo di un flag di progetto, le corrispondenze sono limitate ai bucket nel progetto predefinito.

  • Le shell (come bash e zsh) possono tentare di espandere i caratteri jolly prima di passare a gcloud CLI. Se il carattere jolly doveva fare riferimento a un oggetto cloud, possono verificarsi errori "Non trovato" inaspettati. Per ad esempio, la shell potrebbe provare a espandere il carattere jolly gs://my-bucket/* macchina locale, che non corrisponderebbe a nessun file locale, con un conseguente errore del comando.

    Inoltre, alcune shell includono altri caratteri nel carattere jolly di caratteri. Ad esempio, se utilizzi zsh con l'opzione extglobl se attivato, considera # come un carattere speciale, che è in conflitto con quello per fare riferimento a oggetti sottoposti al controllo delle versioni (vedi Ripristina le versioni degli oggetti non correnti, ad esempio.

    Per evitare questi problemi, racchiudi l'espressione con caratteri jolly tra le virgolette (su Linux) o le virgolette doppie (su Windows).

  • Il tentativo di specificare un nome file contenente caratteri jolly non funzionerà, poiché gli strumenti a riga di comando tentano di espandere i caratteri jolly anziché utilizzarli come caratteri letterali. Ad esempio, eseguendo il comando:

    gcloud storage cp './file[1]' gs://my-bucket

    non copia mai un file locale denominato file[1]. Invece, gcloud CLI considera sempre [1] come un carattere jolly.

    gcloud CLI non supporta un file "raw" che gli consente di funzionano con nomi di file che contengono caratteri jolly. Per questi file, dovresti utilizzare uno strumento diverso come la console Google Cloud o usare un carattere jolly per acquisire i file. Ad esempio, per acquisire un file denominato file[1], puoi utilizzare questo comando:

    gcloud storage cp './file*1*' gs://my-bucket
  • In base al comportamento Unix standard, il carattere jolly * trova corrispondenze solo per i file che non inizia con un carattere . (per evitare confusione con . e .. presenti in tutte le directory Unix). gcloud CLI presenta lo stesso comportamento quando si utilizzano caratteri jolly su un URI del file system, ma non fornisce questo comportamento sugli URI cloud. Ad esempio, il seguente comando copia tutti gli oggetti da gs://bucket1 a gs://bucket2:

    gcloud storage cp gs://bucket1/* gs://bucket2

    Tuttavia, il seguente comando copia solo i file che non iniziano con un . dalla directory dir a gs://bucket1:

    gcloud storage cp dir/* gs://bucket1

Considerazioni sull'efficienza

  • L'utilizzo è più efficiente, veloce e con meno traffico di rete caratteri jolly che hanno un prefisso del nome oggetto che non contiene caratteri jolly, ad esempio:

    gs://bucket/abc*.txt

    rispetto all'utilizzo di caratteri jolly come prima parte del nome dell'oggetto, ad esempio:

    gs://bucket/*abc.txt

    Questo perché la richiesta per gs://bucket/abc*.txt chiede al server di restituisce il sottoinsieme di risultati il cui nome dell'oggetto inizia con abc nel la radice del bucket, quindi filtra l'elenco dei risultati in base agli oggetti il cui nome termina con .txt. Al contrario, gs://bucket/*abc.txt richiede al server dell'elenco completo degli oggetti nella radice del bucket, quindi li filtra oggetti il cui nome termina con abc.txt. Questa considerazione dell'efficienza diventa sempre più evidente quando si utilizzano bucket contenenti migliaia o più oggetti. A volte è possibile impostare i nomi degli oggetti in modo che corrispondano ai pattern di corrispondenza dei caratteri jolly previsti per sfruttare l'efficienza delle richieste di prefisso lato server.

  • Supponi di avere un bucket con questi oggetti:

    gs://bucket/obj1
    gs://bucket/obj2
    gs://bucket/obj3
    gs://bucket/obj4
    gs://bucket/dir1/obj5
    gs://bucket/dir2/obj6

    Se esegui il comando:

    gcloud storage ls gs://bucket/*/obj5

    gcloud storage esegue un elenco di bucket di primo livello delimitato da / e poi un elenco di bucket per ogni sottodirectory, per un totale di 3 elenchi di bucket:

    GET /bucket/?delimiter=/
    GET /bucket/?prefix=dir1/obj5&delimiter=/
    GET /bucket/?prefix=dir2/obj5&delimiter=/
    

    Maggiore è il numero di elenchi di bucket richiesti dal carattere jolly, più lento sarà il processo diventa più costoso. Il numero di schede del bucket richieste aumenta in base a quanto segue:

    • Il numero di componenti con caratteri jolly (ad es. gs://bucket/a??b/c*/*/d ha 3 componenti jolly);

    • il numero di sottodirectory che corrispondono a ciascun componente; e

    • il numero di risultati (la paginazione viene implementata quando il numero la dimensione dei risultati è troppo grande e sono stati specificati indicatori per ciascuno).

    Se vuoi utilizzare un carattere jolly a metà percorso, potresti provare a usare un carattere jolly ricorsivo, ad esempio:

    gcloud storage ls gs://bucket/**/obj5

    Corrisponde a più oggetti di gs://bucket/*/obj5 (poiché si estende ma viene implementato utilizzando un elenco di bucket senza delimitatore richiesta (il che significa meno richieste di bucket, anche se elenca l'intera bucket e filtri localmente, quindi potrebbe essere necessaria una quantità non banale traffico di rete).