我注意到似乎没有从AWS管理控制台下载整个s3桶的选项。

有什么简单的方法可以把所有东西都装进我的桶里吗?我正在考虑使根文件夹公共,使用wget抓取它,然后再次使它私有,但我不知道是否有更简单的方法。


当前回答

使用AWS S3 CLI下载:

aws s3 cp s3://WholeBucket LocalFolder --recursive
aws s3 cp s3://Bucket/Folder LocalFolder --recursive

要使用代码下载,请使用AWS SDK。

要使用GUI下载,请使用Cyberduck。

其他回答

100%为我工作,我已经下载了所有的文件从aws s3备份。

安装AWS CLI。选择您的操作系统并按照以下步骤操作:安装或更新AWS CLI的最新版本 检查AWS版本:AWS——version

执行config命令:aws configure

Aws s3 cp s3://yourbucketname你的\本地\路径——递归

例如(Windows操作系统):aws s3 cp s3://yourbucketname C:\aws-s3-backup\project-name——recursive

请查看此链接:如何从S3下载整个存储桶到本地文件夹

AWS CLI

有关更多信息,请参阅“AWS CLI命令参考”。

AWS最近发布了他们的命令行工具,它的工作原理很像boto,可以使用

sudo easy_install awscli

or

sudo pip install awscli

安装完成后,您可以简单地运行:

aws s3 sync s3://<source_bucket> <local_destination>

例如:

aws s3 sync s3://mybucket .

将mybucket中的所有对象下载到当前目录。

并输出:

download: s3://mybucket/test.txt to test.txt
download: s3://mybucket/test2.txt to test2.txt

这将使用单向同步下载您的所有文件。它不会删除当前目录中的任何现有文件,除非您指定了——delete,而且它不会更改或删除S3上的任何文件。

您还可以进行S3桶到S3桶的同步,或本地到S3桶的同步。

请查看文档和其他示例。

虽然上面的示例是如何下载完整的存储桶,但您也可以通过执行下面的操作递归地下载文件夹

aws s3 cp s3://BUCKETNAME/PATH/TO/FOLDER LocalFolderName --recursive

这将指示CLI递归下载BUCKETNAME桶中的PATH/ to / folder目录中的所有文件和文件夹键。

你可以使用s3cmd下载你的桶:

s3cmd --configure
s3cmd sync s3://bucketnamehere/folder /destination/folder

您可以使用另一种名为rclone的工具。这是Rclone文档中的一个代码示例:

rclone sync /home/local/directory remote:bucket

使用boto3下载具有特定前缀的桶中的所有对象

import boto3

s3 = boto3.client('s3', region_name='us-east-1', 
                     aws_access_key_id=AWS_KEY_ID, 
                     aws_secret_access_key=AWS_SECRET)

def get_all_s3_keys(bucket,prefix):
    keys = []

    kwargs = {'Bucket': bucket,Prefix=prefix}
    while True:
        resp = s3.list_objects_v2(**kwargs)
        for obj in resp['Contents']:
             keys.append(obj['Key'])

        try:
            kwargs['ContinuationToken'] = resp['NextContinuationToken']
        except KeyError:
            break

        return keys

def download_file(file_name, bucket,key):
    file=s3.download_file(
    Filename=file_name,
    Bucket=bucket,
    Key=key)
    return file

bucket="gid-folder"
prefix="test_"
keys=get_all_s3_keys(bucket,prefix):

for key in keys:
     download_file(key, bucket,key)
   
 

我已经为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之后,“下载整个桶”可能会满足你的需要。