2014-12-03 13 views
11

Ich möchte die AWS-CLI verwenden, um den Inhalt eines Buckets abzufragen und festzustellen, 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 mit einem Muster übereinstimmen? Zum Beispiel:Filter S3 list-objects-Ergebnisse, um einen Schlüssel zu finden, der einem Muster entspricht

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

Antwort

21

Der --query Argument verwendet JMESPath Ausdrücke. JMESPath has an internal function contains, mit dem Sie nach einem Zeichenfolgenmuster suchen können.

Dies sollte die gewünschten Ergebnisse liefern: (. Mit Linux ich Apostrophe ' eher zu verwenden, benötigt als ` Zecken wieder um mySearchPattern)

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

Wenn Sie Schlüssel Start suchen möchten mit bestimmten Zeichen, können Sie auch das --prefix Argument verwenden:

aws s3api list-objects --bucket myBucketName --prefix "myPrefixToSearchFor" 
+0

Unter Linux mit einfachen Anführungszeichen funktionierte nicht. Aber das Entkommen der Backticks funktionierte. (ZB. \\ "mySearchPattern \\") – swdev

+0

Wenn mySearchPattern eine reine Zahl ist (z. B. '20150101'), beschwert sich die CLI, dass es sich um eine Zeichenfolge und nicht um eine Ganzzahl handelt. Selbst durch Sie haben es zitiert. Habe keine Lösung gefunden, außer eine Nicht-Ziffer in das Suchmuster (zB. '20150101 /') aufzunehmen, dann reklamiert es nicht. – swdev

+0

Danke für den Kommentar der einzelnen Zitate! Ich habe mich gefragt, ob es weitergehen würde. – notzippy