在awss3上批量移动文件

u5rb5r59  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(895)

我有一个s3 bucket,它有一个带有输入和输出文件夹的目录结构。使用一个使用javaapi与s3通信的工具将文件存储在输入目录中,但是在将文件从输入目录移动到输出目录的情况下,我们需要使用其他替代方法(即使它是我们实现的java类)。
我需要知道的是,如果给定要移动的文件列表,是否可以批量移动文件,而不必逐个文件地调用unixs3cli中的mv命令,这似乎非常慢。我检查了一些关于用java在s3上进行批量删除的信息,但是我需要更多的Maven意见,如果有的话。
我愿意接受关于语言使用的建议,这些语言可以有一个符合我目的的api。
ps:关于要移动的文件列表的问题非常关键,因为获取这些文件的标准不可能使用unixs3cli中常见的include/exclude来实现
提前谢谢

**编辑

刚刚发现了boto3 api,它的设置非常简单。只是将这些信息和标签添加到主题中,以便对此有更多的了解。tks公司

mpgws1up

mpgws1up1#

amazons3中没有“move”命令。相反,需要复制对象,然后删除源文件。这就是awscli在执行 aws s3 mv .
awscli的优点在于它并行地发出copy命令,这大大减少了移动大量对象的时间。事实上,amazons3copyobjectapi调用一次只接受一个对象。因此,需要并行地发出这样的命令,以便更快地移动它们。
另一种方法是使用s3批处理操作。可以使用put对象副本:
put object copy操作复制清单中指定的每个对象。您可以将对象复制到同一aws区域中的不同bucket或不同区域中的bucket。s3批处理操作支持通过AmazonS3复制对象的大多数选项。这些选项包括设置对象元数据、设置权限和更改对象的存储类。
要复制的对象列表可以在csv文件中指定。然后需要在复制之后删除对象,这可以通过 aws cli delete-objects 还有一个物体列表。

aamkag61

aamkag612#

如果需要在多个文件上并行调用aws cli,可以在linux上使用并行:

find . -name *.jpg | parallel aws s3 mv s3://bucketA/{} s3://bucketB/

不过,您需要安装它。例如:

sudo apt install parallel

sudo yum install parallel

相关问题