【问题标题】:AWS CLI list-objects by specific dateAWS CLI 按特定日期列出对象
【发布时间】: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


【解决方案1】:

请尝试:

那就试试吧:

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}"]

记住始终将命令作为列表而不是字符串传递。

【讨论】:

    猜你喜欢
    • 2016-10-15
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 2017-08-19
    • 2014-07-01
    • 2020-06-03
    • 2012-03-20
    相关资源
    最近更新 更多