我注意到似乎没有从AWS管理控制台下载整个s3桶的选项。
有什么简单的方法可以把所有东西都装进我的桶里吗?我正在考虑使根文件夹公共,使用wget抓取它,然后再次使它私有,但我不知道是否有更简单的方法。
我注意到似乎没有从AWS管理控制台下载整个s3桶的选项。
有什么简单的方法可以把所有东西都装进我的桶里吗?我正在考虑使根文件夹公共,使用wget抓取它,然后再次使它私有,但我不知道是否有更简单的方法。
当前回答
您可以使用这个AWS cli命令将整个S3桶内容下载到本地文件夹
aws s3 sync s3://your-bucket-name "Local Folder Path"
如果你看到这样的错误
fatal error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
——no-verify-ssl(布尔)
默认情况下,AWS CLI与AWS服务通信时使用SSL。对于每个SSL连接,AWS CLI将验证SSL证书。此选项将覆盖验证SSL证书的默认行为。 参考
使用命令——no-verify-ssl来使用这个标记
aws s3 sync s3://your-bucket-name "Local Folder Path" --no-verify-ssl
其他回答
Aws同步是完美的解决方案。它不是双向的。从源头到目的地只有一条路。此外,如果你在bucket中有很多项目,首先创建s3端点将是一个好主意,这样下载就会更快(因为下载不是通过互联网进行的,而是通过内部网进行的),而且不收费
我使用了几种不同的方法将Amazon S3数据复制到本地机器,包括s3cmd,到目前为止最简单的方法是Cyberduck。
你所需要做的就是输入你的亚马逊凭证,然后使用简单的界面来下载、上传、同步你的存储桶、文件夹或文件。
@Layke的回答很好,但如果你有大量的数据,不想永远等待,你应该阅读“AWS CLI S3配置”。
以下命令将告诉AWS CLI使用1,000个线程执行作业(每个小文件或多部分副本的一部分),并查看100,000个作业:
aws configure set default.s3.max_concurrent_requests 1000
aws configure set default.s3.max_queue_size 100000
运行这些之后,你可以使用简单的sync命令:
aws s3 sync s3://source-bucket/source-path s3://destination-bucket/destination-path
or
aws s3 sync s3://source-bucket/source-path c:\my\local\data\path
在一个拥有4核CPU和16GB RAM的系统上,对于像我这样的情况(3-50GB文件),同步/复制速度从9.5MiB/s提高到700+MiB/s,比默认配置提高了70倍。
另一个可以帮助一些OS X用户的选项是Transmit。
它是一个FTP程序,还可以让您连接到S3文件。而且,它有一个选项,可以将任何FTP或S3存储作为文件夹挂载在Finder中,但这只是在有限的时间内。
使用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)