28

I would like to use the AWS CLI to query the contents of a bucket and see if a particular file exists, but the bucket contains thousands of files. How can I filter the results to only show key names that match a pattern? For example:

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

2 回答 2

62

--query参数使用 JMESPath 表达式。 JMESPath 有一个内部函数contains,允许您搜索字符串模式。

这应该会产生预期的结果:

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

(对于 Linux,我需要使用单引号'而不是 . 周围的反`引号mySearchPattern。)

如果要搜索以某些字符开头的键,还可以使用--prefix参数:

aws s3api list-objects --bucket myBucketName --prefix "myPrefixToSearchFor"
于 2014-12-03T15:04:31.427 回答
0

我在 Ubuntu 14、awscli 1.2 上试过

--query "Contents[?contains(Key,'stati')].Key" 
--query "Contents[?contains(Key,\'stati\')].Key" 
--query "Contents[?contains(Key,`stati`)].Key"

非法代币价值'?contains(Key,'stati')].Key'

将 aws 版本升级到 1.16 后,使用

--query "Contents[?contains(Key,'stati')].Key" 
于 2019-01-23T08:39:03.920 回答