我注意到似乎没有从AWS管理控制台下载整个s3桶的选项。
有什么简单的方法可以把所有东西都装进我的桶里吗?我正在考虑使根文件夹公共,使用wget抓取它,然后再次使它私有,但我不知道是否有更简单的方法。
我注意到似乎没有从AWS管理控制台下载整个s3桶的选项。
有什么简单的方法可以把所有东西都装进我的桶里吗?我正在考虑使根文件夹公共,使用wget抓取它,然后再次使它私有,但我不知道是否有更简单的方法。
当前回答
AWS CLI是在本地下载整个S3存储桶的最佳选择。
安装AWS CLI。 配置AWS CLI以使用默认的安全凭据和默认的AWS区域。 下载整个S3桶使用命令 Aws s3 sync s3://yourbucketname localpath
不同AWS服务的AWS CLI参考:AWS命令行接口
其他回答
您可以使用MinIO客户端执行以下操作:mc cp -r https://s3-us-west-2.amazonaws.com/bucketName/ localdir
MinIO还支持会话、断点续传下载、上传等等。MinIO支持Linux、OS X和Windows操作系统。它是用Golang编写的,在Apache Version 2.0下发布。
你可以用s3cmd命令简单地得到它:
s3cmd get --recursive --continue s3://test-bucket local-directory/
正如@layke所说,从S3 cli下载文件是最好的做法,这是安全的。但在某些情况下,人们需要使用wget来下载文件,下面是解决方案
aws s3 presign s3://<your_bucket_name/>
这将presign将为您提供临时公共URL,您可以使用presign_url从S3下载内容,在您的情况下使用wget或任何其他下载客户端。
我已经为S3做了一些开发,我还没有找到一个简单的方法来下载整个存储桶。
如果您想用Java编写代码,那么jets3t库很容易用于创建存储桶列表并遍历该列表以下载它们。
首先,从AWS管理咨询器获取一个公共私钥集,这样您就可以创建一个S3service对象:
AWSCredentials awsCredentials = new AWSCredentials(YourAccessKey, YourAwsSecretKey);
s3Service = new RestS3Service(awsCredentials);
然后,获取bucket对象的数组:
S3Object[] objects = s3Service.listObjects(YourBucketNameString);
最后,遍历该数组,每次下载一个对象:
S3Object obj = s3Service.getObject(bucket, fileName);
file = obj.getDataInputStream();
我把连接代码放在线程安全的单例中。由于显而易见的原因,省略了必要的try/catch语法。
如果你更愿意用Python编写代码,你可以使用Boto。
在查看BucketExplorer之后,“下载整个桶”可能会满足你的需要。
你可以使用s3cmd下载你的桶:
s3cmd --configure
s3cmd sync s3://bucketnamehere/folder /destination/folder
您可以使用另一种名为rclone的工具。这是Rclone文档中的一个代码示例:
rclone sync /home/local/directory remote:bucket