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

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


当前回答

另一个可以帮助一些OS X用户的选项是Transmit。

它是一个FTP程序,还可以让您连接到S3文件。而且,它有一个选项,可以将任何FTP或S3存储作为文件夹挂载在Finder中,但这只是在有限的时间内。

其他回答

如果您使用带有S3Fox的Firefox,它确实允许您选择所有文件(shift-选择第一个和最后一个),然后右键单击并下载所有文件。

我已经处理了500多个文件,没有任何问题。

如果桶相当大,有一个叫做s4cmd的命令可以进行并行连接,提高下载时间:

把它安装在Debian上就像

apt install s4cmd

如果你有pip:

pip install s4cmd

它将读取~/。s3cfg文件(如果没有安装s3cmd并运行s3cmd——configure),或者您可以在命令上指定——access-key=ACCESS_KEY——secret-key=SECRET_KEY。

命令行类似于s3cmd。在这种情况下,建议同步,因为您可以取消下载并重新启动,而不必重新下载文件。

s4cmd [--access-key=ACCESS_KEY --secret-key=SECRET_KEY] sync s3://<your-bucket> /some/local/dir

如果你下载了很多数据(>1TB),这可能会影响你的账单,先计算一下这将是成本

当在Windows,我的首选GUI工具这是CloudBerry Explorer免费软件 Amazon S3。它有一个相当精致的文件资源管理器和类似ftp的界面。

为了添加另一个GUI选项,我们使用了WinSCP的S3功能。它非常容易连接,只需要你的访问密钥和密钥在用户界面。然后,您可以从任何可访问的存储桶中浏览和下载所需的任何文件,包括嵌套文件夹的递归下载。

由于通过安全检查新软件可能是一个挑战,而且WinSCP相当普遍,因此使用它而不是尝试安装更专业的实用程序会非常有益。

使用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)