wake-up-neo.com

Filtern Sie die Ergebnisse der S3-Listenobjekte, um einen Schlüssel zu finden, der einem Muster entspricht

Ich möchte die AWS-CLI verwenden, um den Inhalt eines Buckets abzufragen und zu sehen, ob eine bestimmte Datei vorhanden ist, der Bucket jedoch Tausende von Dateien enthält. Wie kann ich die Ergebnisse so filtern, dass nur Schlüsselnamen angezeigt werden, die einem Muster entsprechen? Zum Beispiel:

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

Das Argument --query verwendet JMESPath-Ausdrücke. JMESPath hat eine interne Funktion contains , mit der Sie nach einem String-Muster suchen können.

Dies sollte die gewünschten Ergebnisse liefern:

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

(Unter Linux musste ich einfache Anführungszeichen ' verwenden, anstatt hintere Markierungen ` um mySearchPattern zu verwenden.)

Wenn Sie nach Schlüsseln suchen Beginn mit bestimmten Zeichen, können Sie auch das Argument --prefix verwenden:

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

Ich habe auf Ubuntu 14 versucht, awscli 1.2 -- Abfrage "Inhalt [? Enthält (Schlüssel, 'stati')]. Schlüssel" -- Abfrage "Inhalt [? Enthält (Schlüssel,\'stati \') ] .Key "-- Abfrage" Inhalt [? Enthält (Schlüssel, stati)]. Schlüssel "

Ungültiger Tokenwert '? Enthält (Key,' stati ')]. Key'

Nach dem Upgrade der aws-Version auf 1.16 wurde mit gearbeitet

--query "Inhalt [? enthält (Key, 'stati')]. Key" 

0
vcarusi