Amazon S3 在日期后使用正则表达式复制文件

Amazon S3 Copy files after date and with regex

我正在尝试将一些文件从 S3 sourceBucket 复制到 targetBucket,但我需要按日期和前缀进行过滤。 我希望它可以用 AWS CLI 完成,但目前我被 list-object 或 cp 命令卡住了。

我可以使用

正确过滤
aws s3api list-objects-v2 --bucket sourceBucket --query 'Contents[?(LastModified > `2021-09-01`)]' --prefix "somePrefix_"

使用 CP 我可以复制文件,但只能通过前缀

aws s3 cp s3://sourceBucket/ s3://targetBucket/ --recursive --include "somePrefix" --exclude "*"

我尝试使用 header --x-amz-copy-source-if-modified-since 提出一些想法,但看起来您可以将它与命令 aws s3api copy-object 一起使用,并且它一次复制一个项目( doc)。 我读了一些 answers/docs,我想我明白 che cp 命令不按日期过滤,而只按前缀过滤。

你知道如何解决这个问题吗? 提前致谢!

由于您已经有了一个包含要复制到另一个存储桶的对象的列表,我建议编写一个 bash 脚本来复制多个对象:

#!/bin/bash

SOURCE_BUCKET="<my-bucket>"
DESTINATION_BUCKET="<my-other-bucket>"
PREFIX="<some-prefix>"

content=$(aws s3api list-objects-v2 --bucket $SOURCE_BUCKET --query 'Contents[?(LastModified > `2021-09-01`)]' --prefix $PREFIX | jq -r ".[].Key")

for file in $content;
do
    aws s3api copy-object --copy-source $SOURCE_BUCKET/$file --key $file --bucket $DESTINATION_BUCKET | jq
done

请注意,此脚本需要安装 jq