首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下载S3桶中子文件夹的全部内容

下载S3桶中子文件夹的全部内容
EN

Stack Overflow用户
提问于 2020-10-06 13:21:23
回答 2查看 9.7K关注 0票数 3

我在s3中有一个名为“样本数据”的桶。在桶里,我有标签为"A“到"Z”的文件夹。

在每个字母文件夹中有更多的文件和文件夹。下载字母文件夹和所有内容的最快方法是什么?

例如-> sample-data/a/foo.txt,more_files/foo1.txt

在上面的示例中,桶sample-data包含一个名为a的文件夹,其中包含foo.txt,还有一个名为more_files的文件夹,其中包含foo1.txt

我知道如何下载一个文件。例如,如果我想要foo.txt,我将执行以下操作。

代码语言:javascript
复制
    s3 = boto3.client('s3')
    s3.download_file("sample-data", "a/foo.txt", "foo.txt")

但是,我想知道是否可以下载名为a的文件夹以及它的全部内容?任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-06 17:03:22

我想你最好的选择是awscli

代码语言:javascript
复制
aws s3 cp --recursive s3://mybucket/your_folder_named_a path/to/your/destination

从医生那里:

-对指定目录或前缀下的所有文件或对象执行递归(布尔)命令。

编辑:

要使用boto3执行此操作,请尝试如下:

代码语言:javascript
复制
import os
import errno
import boto3

client = boto3.client('s3')


def assert_dir_exists(path):
    try:
        os.makedirs(path)
    except OSError as e:
        if e.errno != errno.EEXIST:
            raise


def download_dir(bucket, path, target):
    # Handle missing / at end of prefix
    if not path.endswith('/'):
        path += '/'

    paginator = client.get_paginator('list_objects_v2')
    for result in paginator.paginate(Bucket=bucket, Prefix=path):
        # Download each file individually
        for key in result['Contents']:
            # Calculate relative path
            rel_path = key['Key'][len(path):]
            # Skip paths ending in /
            if not key['Key'].endswith('/'):
                local_file_path = os.path.join(target, rel_path)
                # Make sure directories exist
                local_file_dir = os.path.dirname(local_file_path)
                assert_dir_exists(local_file_dir)
                client.download_file(bucket, key['Key'], local_file_path)


download_dir('your_bucket', 'your_folder', 'destination')
票数 12
EN

Stack Overflow用户

发布于 2020-10-06 14:04:09

列出要下载的文件夹中的所有对象。然后逐个文件迭代并下载。

代码语言:javascript
复制
import boto3 
s3 = boto3.client("s3")
response = s3.list_objects_v2(
    Bucket=BUCKET,
    Prefix ='DIR1/DIR2', 
)

responsedict类型的。包含文件名列表的键是“Content”。

以下是更多信息:

列出桶中的所有文件

boto3文档

我不确定这是否是最快的解决方案,但它可以帮助你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64226700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档