web-dev-qa-db-ja.com

S3リストオブジェクトの結果をフィルタリングして、パターンに一致するキーを見つける

AWS CLIを使用してバケットのコンテンツをクエリし、特定のファイルが存在するかどうかを確認したいのですが、バケットには何千ものファイルが含まれています。パターンに一致するキー名のみを表示するように結果をフィルタリングするにはどうすればよいですか?例えば:

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

--query引数はJMESPath式を使用します。 JMESPathには、文字列パターンを検索できる内部関数contains があります。

これにより、望ましい結果が得られます。

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

(Linuxでは、単一引用符を使用する必要がありました'バックティックではなく`mySearchPatternあたり。)

特定の文字を含むキーstartingを検索する場合は、--prefix引数:

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

Ubuntu 14で試してみました。awscli1.2 --query "Contents [?contains(Key、 'stati')]。Key" --query "Contents [?contains(Key、\ 'stati \')]。Key"-クエリ "Contents [?contains(Key、stati)]。Key"

不正なトークン値 '?contains(Key、' stati ')]。Key'

Awsバージョンを1.16にアップグレードした後、

--query "コンテンツ[?contains(Key、 'stati')]。Key"

0
vcarusi