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 che corrispondano ai pattern di denominazione specificati. In questa pagina vengono descritti i caratteri jolly che supportato e rileva importanti considerazioni sull'utilizzo di 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. Se visualizzi un elenco di comandi come ls, se un elemento * 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 utilizzato come parte di un percorso file locale, il carattere jolly ** deve sempre essere immediatamente preceduto da un delimitatore di directory. Ad esempio, my-directory/**.txt è valido, ma my-directory/abc** no.
? Deve corrispondere a un singolo carattere. Ad esempio, gs://bucket/??.txt trova corrispondenze solo per oggetti con esattamente due caratteri seguiti da .txt.
[CHARACTERS] Deve corrispondere 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 trova corrispondenze per oggetti contenenti le lettere a, b, c, d o e seguite 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 tuo comando non includa un flag da restituire versioni di oggetti non correnti nei risultati, questi caratteri jolly corrispondono solo o versioni successive dell'oggetto.

gcloud CLI supporta gli stessi caratteri jolly sia per l'oggetto che per il file names. 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, generando un messaggio di errore "Non trovato" errori. 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 che contiene caratteri jolly non funziona, poiché gli strumenti a riga di comando tentano di espandere i caratteri jolly rispetto al loro utilizzo come carattere letterale. 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 questo stesso comportamento quando si utilizzano caratteri jolly su un URI del file system, ma non fornisce questo comportamento sugli URI cloud. Ad esempio, Il 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

    è necessario utilizzare 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 configurare i nomi degli oggetti per adattarsi ai pattern di corrispondenza dei caratteri jolly previsti per sfruttare nell'esecuzione 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 di bucket richieste cresce come segue:

    • Il numero di componenti con caratteri jolly (ad es. gs://bucket/a??b/c*/*/d ne 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 sono troppo grandi e sono stati specificati indicatori per ognuno).

    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 richiesta una quantità non banale traffico di rete).