感谢@约翰·罗滕斯坦.在AWS cli命令的基础上,这就是我如何能够迭代存储桶中的所有对象并删除其用户定义的元数据的方法.
如果您希望在不完全删除的情况下对存储桶中所有对象的元数据进行更改,除了需要添加要添加到元数据中的键-值对外,这种方法仍然可以使用.请注意,它会创建对象的新副本,这意味着它只保留您在命令中添加的元数据,其余所有内容都将被删除.
#!/bin/bash
SOURCE_BUCKET="source bucket"
DEST_BUCKET="dest_bucket"
KMS_KEY_ID="kms_key_id"
# Fetch object keys, replace tabs with newlines, and process each key for copying
aws s3api list-objects --bucket "$SOURCE_BUCKET" --query 'Contents[].Key' --output text | tr '\t' '\n' | while read -r OBJECT_KEY
do
echo "Processing ${OBJECT_KEY}..."
aws s3api copy-object \
--copy-source "${SOURCE_BUCKET}/${OBJECT_KEY}" \
--key "${OBJECT_KEY}" \
--bucket "$DEST_BUCKET" \
--metadata-directive REPLACE \
--ssekms-key-id "$KMS_KEY_ID" \
--server-side-encryption "aws:kms"
if [ $? -eq 0 ]; then
echo "Successfully copied ${OBJECT_KEY}."
else
echo "Error copying ${OBJECT_KEY}."
fi
done