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

Bar*_*rbi 1 copy command-line-interface amazon-s3 amazon-web-services

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

我可以正确过滤

aws s3api list-objects-v2 --bucket sourceBucket --query 'Contents[?(LastModified > `2021-09-01`)]' --prefix "somePrefix_"
Run Code Online (Sandbox Code Playgroud)

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

aws s3 cp s3://sourceBucket/ s3://targetBucket/ --recursive --include "somePrefix" --exclude "*"
Run Code Online (Sandbox Code Playgroud)

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

您知道如何解决这个问题吗?先感谢您!

Erv*_*gyi 7

由于您已经有一个包含要复制到另一个存储桶的对象的列表,我建议编写一个 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
Run Code Online (Sandbox Code Playgroud)

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