wis*_*shy 59 amazon-s3 amazon-ec2 amazon-web-services
我有一个用例,我以编程方式从S3启动EC2实例,复制和可执行文件,运行它并关闭实例(在用户数据中完成).我只需要从S3中获取最后添加的文件.有没有办法使用CLI从S3存储桶中获取最后修改的文件/对象?
Dav*_*ray 121
您可以列出存储桶中的所有对象aws s3 ls $BUCKET --recursive:
$ aws s3 ls $BUCKET --recursive
2015-05-05 15:36:17 4 an_object.txt
2015-06-08 14:14:44 16322599 some/other/object
2015-04-29 12:09:29 32768 yet-another-object.sh
Run Code Online (Sandbox Code Playgroud)
它们按键按字母顺序排序,但第一列是最后修改的时间.快速sort按日期重新排序:
$ aws s3 ls $BUCKET --recursive | sort
2015-04-29 12:09:29 32768 yet-another-object.sh
2015-05-05 15:36:17 4 an_object.txt
2015-06-08 14:14:44 16322599 some/other/object
Run Code Online (Sandbox Code Playgroud)
tail -n 1选择最后一行,并awk '{print $4}'提取第四列(对象的名称).
$ aws s3 ls $BUCKET --recursive | sort | tail -n 1 | awk '{print $4}'
some/other/object
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的是,将其放入aws s3 cp以下载对象:
$ KEY=`aws s3 ls $BUCKET --recursive | sort | tail -n 1 | awk '{print $4}'`
$ aws s3 cp s3://$BUCKET/$KEY ./latest-object
Run Code Online (Sandbox Code Playgroud)
Rom*_*kin 33
过了一会儿,有一个小更新,如何优雅地做到这一点:
aws s3api list-objects-v2 --bucket "my-awesome-bucket" --query 'sort_by(Contents, &LastModified)[-1].Key' --output=text
Run Code Online (Sandbox Code Playgroud)
reverse我们可以通过以下方式从列表中获取最后一个条目,而不是额外的功能[-1]
旧答案:
这个命令只做没有任何外部依赖的工作:
aws s3api list-objects-v2 --bucket "my-awesome-bucket" --query 'reverse(sort_by(Contents, &LastModified))[:1].Key' --output=text
Run Code Online (Sandbox Code Playgroud)
小智 10
aws s3api list-objects-v2 --bucket "bucket-name" |jq -c ".[] | max_by(.LastModified)|.Key"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43392 次 |
| 最近记录: |