在某个特定日期寻找s3cmd的下载命令

时间:2016-09-13 22:24:47

标签: amazon-web-services amazon-s3 aws-cli s3cmd

我正在试图弄清楚s3cmd命令将按日期从桶中下载文件是什么,所以例如我有一个名为“test”的存储桶,并且在该存储桶中有来自不同日期的不同文件。我想获取昨天上传的文件。命令是什么?

2 个答案:

答案 0 :(得分:1)

没有一个命令可以让你这样做。你必须写一些像这样的东西。或者使用允许您执行此操作的SDK。下面的脚本是一个示例脚本,它将从过去30天获取S3文件。

<img src="images/contact.png" width="20%">

答案 1 :(得分:0)

我喜欢s3cmd但是使用单行命令,我更喜欢aws cli和jq JSon处理器的JSon输出

该命令看起来像

aws s3api list-objects --bucket "yourbucket" |\
jq '.Contents[] | select(.LastModified | startswith("yourdate")).Key' --raw-output |\
xargs -I {} aws s3 cp s3://yourbucket/{} .

基本上是脚本的作用

  1. 列出给定存储桶中的所有对象
  2. (有趣的部分)jq将解析Contents数组并选择LastModified值以您的模式开头的元素(您需要更改),获取Key的{​​{1}} s3对象并添加--raw-output,以便从值
  3. 中删除引号
  4. 将结果传递给aws copy命令以从s3
  5. 下载文件

    如果你想进一步自动化,可以从命令行获取昨天

    for mac os

    $ export YESTERDAY=`date -v-1w +%F`
    $ aws s3api list-objects --bucket "ariba-install" |\
    jq '.Contents[] | select(.LastModified | startswith('\"$YESTERDAY\"')).Key' --raw-output |\
    xargs -I {} aws s3 cp s3://ariba-install/{} .
    

    对于linux操作系统(或其他我不熟悉的bash风格)

    $ export YESTERDAY=`date -d "1 day ago" '+%Y-%m-%d' `
    $ aws s3api list-objects --bucket "ariba-install" |\
    jq '.Contents[] | select(.LastModified | startswith('\"$YESTERDAY\"')).Key' --raw-output |\
    xargs -I {} aws s3 cp s3://ariba-install/{} .
    

    现在您可以了解是否要将YESTERDAY变量更改为具有不同类型的日期