Come posso utilizzare i caratteri jolly per `cp` un gruppo di file con AWS CLI


110

Ho problemi a utilizzare *nell'AWS CLI per selezionare un sottoinsieme di file da un determinato bucket.

L'aggiunta *al percorso in questo modo non sembra funzionare

aws s3 cp s3://data/2016-08* .

Risposte:


184

Per scaricare più file da un secchio AWS nella directory corrente, è possibile utilizzare recursive, excludee includele bandiere come questo:

aws s3 cp s3://data/ . --recursive --exclude "*" --include "2016-08*"

Per maggiori informazioni su come utilizzare questi filtri: http://docs.aws.amazon.com/cli/latest/reference/s3/#use-of-exclude-and-include-filters


24
Vorrei sottolineare che --exclude "*"non è un errore di battitura. Se non lo aggiungi, l'inclusione corrisponderà a qualsiasi cosa . Come da documentazione: nota che, per impostazione predefinita, tutti i file sono inclusi. Ciò significa che fornire solo un filtro --include non cambierà i file trasferiti. --include includerà di nuovo solo i file che sono stati esclusi da un filtro --exclude. Se desideri caricare solo file con una particolare estensione, devi prima escludere tutti i file, quindi includere nuovamente i file con la particolare estensione.
pyb

7
Sii consapevole anche dell'ordine di esclusione e inclusione.
keiki

3
Puoi anche usare syncper un effetto simile, che è ricorsivo per impostazione predefinita:aws s3 sync s3://data/ . --exclude "*" --include "2016-08*"
enarmonico

55

L'ordine dei parametri è importante

Escludi e includi devono essere utilizzati in un ordine specifico, dobbiamo prima escludere e poi includere. Il viceversa non avrà successo.

aws s3 cp s3://data/ . --recursive  --include "2016-08*" --exclude "*" 

Questo fallirà perché in questo caso l'ordine dei parametri è importante. L'inclusione è esclusa da *

aws s3 cp s3://data/ . --recursive --exclude "*" --include "2016-08*"`

Questo funzionerà perché abbiamo escluso tutto ma in seguito abbiamo incluso la directory specifica.


1

Va bene, devo dire che l'esempio è sbagliato e dovrebbe essere corretto come segue:

aws s3 cp . s3://data/ --recursive --exclude "*" --include "2006-08*" --exclude "*/*"

Le .esigenze devono essere subito dopo cp. Il finale --excludeè assicurarsi che nulla venga prelevato dalle sottodirectory che vengono raccolte da--recursive (appreso quello per errore ...)

Questo funzionerà per chiunque abbia problemi con questo quando saranno arrivati ​​qui.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.