web-dev-qa-db-fra.com

Filtrez les résultats des objets de liste S3 pour trouver une clé correspondant à un motif

J'aimerais utiliser l'AWS CLI pour interroger le contenu d'un compartiment et voir si un fichier particulier existe, mais le compartiment contient des milliers de fichiers. Comment filtrer les résultats pour afficher uniquement les noms de clés correspondant à un modèle? Par exemple:

aws s3api list-objects --bucket myBucketName --query "Contents[?Key==*mySearchPattern*]"
14
dnlbrky

L'argument --query utilise des expressions JMESPath. JMESPath a une fonction interne contains qui vous permet de rechercher un modèle de chaîne.

Cela devrait donner les résultats souhaités:

aws s3api list-objects --bucket myBucketName --query "Contents[?contains(Key, `mySearchPattern`)]"

(Avec Linux, je devais utiliser des guillemets simples ' plutôt que des ticks arrières ` autour de mySearchPattern.)

Si vous souhaitez rechercher les clés commençant par avec certains caractères, vous pouvez également utiliser l'argument --prefix:

aws s3api list-objects --bucket myBucketName --prefix "myPrefixToSearchFor"
29
dnlbrky

J'ai essayé sur Ubuntu 14, awscli 1.2 -- requête "Contenu [? Contient (Key, 'stati')]]. Key" -- requête "Contenu"? ] .Key "" -- requête "Contenu [? Contient (Key, stati)]. Key"

Valeur de jeton illégale '? Contient (Clé,' stati ')]. Key'

Après avoir mis à niveau la version d’AWS vers la version 1.16, a travaillé avec

- requête "Contenu [? contient (Clé, 'stati')]. Clé" 

0
vcarusi