【发布时间】:2018-10-22 23:24:21
【问题描述】:
我正在尝试制作一个 groovy 脚本,列出过去三天内上传的 AWS S3 上的对象。我在运行脚本的代理上安装了 AWS CLI。我发现按日期列出对象的命令如下:
def cmd = "aws s3api list-objects --bucket (name of bucket) --query \"Contents[?LastModified>= '2018-10-16'].{Key: Key, LastModified: LastModified }\""
当我直接从 putty 会话在代理上运行此命令时,它运行良好并正确列出了对象。但是当我尝试从 groovy 脚本执行相同的命令时,我收到以下错误:
--query "Contents[?LastModified: Bad jmespath expression: Unclosed" 分隔符的值错误: "内容[?LastModified ^
我尝试用单引号替换第一个和最后一个引号,但没有成功。我尝试对内容之前和LastModified 之后的引号做同样的事情,但效果不佳。我尝试将Contents[?LastModified>= '2018-10-16'].{Key: Key, LastModified: LastModified } 传递给字符串变量,并在--query 之后的命令中传递它的值,但效果不佳。
【问题讨论】:
-
请看这个问题:stackoverflow.com/questions/52875204/…。另外,请改进问题的格式。
-
抱歉格式错误。因此,我使用了您发送给我的示例中使用的相同方法来定义命令。我的命令现在看起来像这样:
def cmd = ['aws', 's3api', 'list-objects', '--bucket', 'Bucket-Name', '--query', 'Contents[?LastModified >= \'${Date1}\'].{Key: Key , LastModified: LastModified}'];当我用像2018-10-16这样的实际日期替换${Date}时它工作正常但是当我尝试将日期作为变量传递时,它似乎没有读取变量的值它会返回我存储桶中的所有对象。 -
所以我发现它将变量
Date作为字符串的一部分传递,因此它将它作为$Date传递,而不是传递变量的值。但是我不能像这样在单独的列表元素中传递变量 Date :'[?LastModified >= ' , "\'${Date1}\'" , ']' ,因为它会给我一个错误说Unknown option 2018-10-16 -
然后试试:
def date = new Date().format('yyyy-MM-dd') def cmd = ['aws', 's3api', 'list-objects', '--bucket', 'Bucket-Name', '--query', "Contents[?LastModified>='${date}'].{Key: Key , LastModified: LastModified}"] -
我尝试过这种方式,但得到了相同的结果。
date没有作为变量传递,因此它的值没有在命令中被读取。
标签: amazon-web-services amazon-s3 groovy command-line-interface