awscli-获取S3的对象的某些前缀(或等同于文件夹的前缀)

时间:2018-11-06 19:03:33

标签: amazon-s3 aws-cli

我有一个带有多个文件夹的存储桶(为了方便理解,我将它们称为文件夹。我知道文件夹在S3中并不存在),所以结构看起来像这样

my_bucket
 |
 |- 2018-11-06-01
      |- file_name1
      |- file_name2
 |- 2018-11-06-02
      |- file_name1
      |- file_name2

我正在尝试仅获取最新文件,即最新文件夹中的文件

我可以通过执行aws s3 ls my_bucket/ | tail -1来获取文件夹名称字符串,但是它将返回PRE 2018-11-06-02/

如何通过处理字符串来获取文件夹名称,以便执行aws s3 cp my_bucket/2018-11-06-02/ <some_path> --recursive

2 个答案:

答案 0 :(得分:1)

如果您只想将其作为一种解决方案来编写,则可以使用以下方法来解决问题:

aws s3 ls <bucket> \
    | sort \
    | tail -n 1 \
    | awk '{print $2}' \
    | xargs -I {} aws s3 cp <bucket>/{} <local_folder> --recursive

您可以将一线阅读成两个部分: -首先,它通过排序读取ls并获取输出的第二个值(取出存储桶名称的PRE部分) -然后,您传递结果(“文件夹”名称),可用于在本地从存储桶中复制字段。

答案 1 :(得分:0)

您可以使用以下方法获取最后修改的文件名(包括完整路径):

aws s3api list-objects-v2 --bucket my-bucket --query 'sort_by(Contents, &LastModified)[-1].Key' --output text

然后,您可以使用Shell工具提取到最后/的路径,并将其发送到复制命令。

或者,用Python(或其他首选语言)对其进行编码。