我注意到似乎没有从AWS管理控制台下载整个s3桶的选项。
有什么简单的方法可以把所有东西都装进我的桶里吗?我正在考虑使根文件夹公共,使用wget抓取它,然后再次使它私有,但我不知道是否有更简单的方法。
我注意到似乎没有从AWS管理控制台下载整个s3桶的选项。
有什么简单的方法可以把所有东西都装进我的桶里吗?我正在考虑使根文件夹公共,使用wget抓取它,然后再次使它私有,但我不知道是否有更简单的方法。
当前回答
使用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)
其他回答
AWS SDK API是将整个文件夹和存储库上传到AWS S3以及在本地下载整个AWS S3存储桶的最佳选择。
上传整个文件夹到AWS S3: AWS S3 sync。s3: / / BucketName
本地下载整个AWS S3桶:AWS S3 sync S3://BucketName。
您还可以为AWS S3桶中的特定文件夹分配路径,如BucketName/ path。
如果您使用带有S3Fox的Firefox,它确实允许您选择所有文件(shift-选择第一个和最后一个),然后右键单击并下载所有文件。
我已经处理了500多个文件,没有任何问题。
如果您只想从AWS下载桶,请首先在您的计算机中安装AWS CLI。在终端更改目录到你想下载的文件,并运行这个命令。
aws s3 sync s3://bucket-name .
如果你也想同步本地和s3目录(如果你在本地文件夹中添加了一些文件),运行这个命令:
aws s3 sync . s3://bucket-name
下面是一个总结,你必须做什么来复制整个桶:
1. 创建一个可以操作AWS s3桶的用户
遵循这篇官方文章:配置基础知识
别忘了:
勾选“编程访问”,以便有可能通过CLI处理AWS。 为用户添加正确的IAM policy,允许用户与s3桶进行交互
2. 下载、安装和配置AWS CLI
查看允许配置的链接:https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html
您可以使用以下命令来添加您在创建用户时获得的密钥:
$ aws configure
AWS Access Key ID [None]: <your_access_key>
AWS Secret Access Key [None]: <your_secret_key>
Default region name [None]: us-west-2
Default output format [None]: json
3.使用以下命令下载内容
你可以递归cp命令,但是aws sync命令是f:
aws s3 sync s3://your_bucket /local/path
要在真正下载之前查看下载的文件是什么,可以使用——dryrun选项。 为了提高速度,可以调整s3的max_concurrent_requests和max_queue_size属性。参见:http://docs.aws.amazon.com/cli/latest/topic/s3-config.html 您可以使用——exclude和——include选项排除/包含一些文件。参见:https://docs.aws.amazon.com/cli/latest/reference/s3/
例如,下面的命令将显示桶中显示的所有.png文件。在不使用——dryrun的情况下重播命令以下载结果文件。
aws s3 sync s3://your_bucket /local/path --recursive --exclude "*" --include "*.png" --dryrun
您可以使用sync来下载整个S3桶。例如,下载当前目录下名为bucket1的整个桶。
aws s3 sync s3://bucket1 .