更新AWS S3对象密钥(密钥名称)

时间:2017-12-07 15:40:32

标签: amazon-web-services amazon-s3 cloud command-line-interface

我需要重命名存储在AWS S3存储桶中的大量文件。每个文件/对象将被单独重命名(基于特定标准 - 没有共同的“前缀/后缀”)。我想出了'current_filename'和'new_filename'的列表,它可以作为.bat文件/队列执行CLI。

是否可以通过CLI或以编程方式仅更新AWS S3存储桶中的对象键(键名),而无需复制/移动文件,如下所示:

aws s3 cp s3://mybucket/folder/myfilename.jpg s3://mybucket/folder/my_NEW_filename.jpg

我可以保持所有其他对象元数据不变,但文件名(密钥名称)必须更改。

2 个答案:

答案 0 :(得分:1)

  

Amazon S3中的对象/文件是不可变的,无法追加到或   改变。为了模拟追加,你需要写   整个文件再次附加其他数据。

您需要复制到其他对象才能更改其名称。 如果你在s3桶之间移动而不是在本地复制并向后移动,那将会很有效。

我们遇到了类似的情况,我将如何更改所有文件。您需要找到模式以对所有S3键进行分组并并行执行重命名。这是分布式系统的美妙之处。

我们存储了日期/小时/ 15分钟模式。我们能够通过cli同时重命名它们来并行执行重命名。

希望它有所帮助。

答案 1 :(得分:1)

您还可以使用AWS S3 Move命令将文件移动到新名称,而不是复制和删除文件。 AWS S3 Move

# AWS Example
aws s3 mv s3://mybucket/test.txt s3://mybucket/test2.txt

# Copy file from local to S3
aws s3 cp robots.txt s3://ascisolutions.com

# Rename/move file
aws s3 mv s3://ascisolutions.com/robots.txt s3://ascisolutions.com/robots.txt.bak

# Move file to a directory in S3
aws s3 mv s3://ascisolutions.com/robots.txt.bak s3://ascisolutions.com/test/robots.txt.bak

# Rename/move file
aws s3 mv s3://ascisolutions.com/test/robots.txt.bak s3://ascisolutions.com/test/robots.txt

# Move file back to root directory of S3 bucket
aws s3 mv s3://ascisolutions.com/test/robots.txt s3://ascisolutions.com/robots.txt