我有一个S3存储桶,它的目录结构包含输入和输出文件夹。使用使用java API与S3通信的工具将文件存储在输入目录中,但在将文件从输入目录移动到输出目录的情况下,我们需要使用其他替代方案(即使它是我们实现的java类)。
我需要知道的是,在给定要移动的文件列表的情况下,是否可以批量移动文件,而不必逐个文件地调用unix s3 cli中的mv命令,这似乎非常慢。我用java检查了一些关于S3批量删除的信息,但我需要一些更专业的意见,如果有的话。
我乐于接受关于使用语言的建议,这些语言可以有一个能满足我的目的的API。
PS:关于要移动的文件列表的问题是至关重要的,因为获取这些文件的标准不可能使用unix s3 cli中提供的通常的包含/排除来实现。
提前感谢
*编辑*
我刚刚找到了设置非常简单的boto3应用程序接口。只需将此信息和标签添加到主题中,以便对此有更多的见解。Tks
发布于 2020-12-24 05:35:23
亚马逊S3中没有“移动”命令。相反,需要对对象进行复制,然后删除源文件。这就是AWS CLI在执行aws s3 mv时实际做的事情。
AWS CLI的伟大之处在于,它以并行的方式发出命令,这极大地减少了移动大量对象的时间。事实是,Amazon S3 CopyObject调用一次只接受一个对象。因此,需要并行发出这样的命令来更快地移动它们。
另一种方法是使用S3 Batch Operations。您可以使用Put object copy
对象复制操作复制清单中指定的每个对象。您可以将对象复制到同一AWS区域的不同存储桶中,也可以复制到不同区域中的存储桶中。亚马逊批处理操作支持通过S3 S3提供的大多数复制对象的选项。这些选项包括设置对象元数据、设置权限和更改对象的存储类。
可以在CSV文件中指定要复制的对象列表。然后,您需要在复制之后删除对象,这可以通过aws cli delete-objects和对象列表来完成。
发布于 2020-12-24 05:42:20
如果您需要对多个文件并行调用aws cli,您可以在linux上使用parallel:
find . -name *.jpg | parallel aws s3 mv s3://bucketA/{} s3://bucketB/不过,您需要安装它。例如:
sudo apt install parallel或
sudo yum install parallelhttps://stackoverflow.com/questions/65429796
复制相似问题