본문 바로가기
AWS

[AWS] AWS S3에서 폴더 다운받기 (CloudPathlib)

by 도토리묵 :D 2022. 8. 23.

S3에서 파일은 많이 다운 받아 봤었다 하지만 디렉토리를 통으로 다운받아야 할 일이 생겨 boto3를 사용해서 그대로 다운받아 보려고 시도해보았는데

 

import boto3

s3 = boto3.client('s3')
s3.download_file('버킷이름', '경로', '로컬에서 다운받고 싶은 이름')

 

보통은 위와 같이 하면 되는데  ... 결과는 실패..

 

stackoverflow를 찾아본 결과 나와 같은 문제를 마주친 다른사람이 있었다.

https://stackoverflow.com/questions/49772151/download-a-folder-from-s3-using-boto3

 

Download a folder from S3 using Boto3

Using Boto3 Python SDK, I was able to download files using the method bucket.download_file() Is there a way to download an entire folder?

stackoverflow.com

 

import boto3
import os 

def downloadDirectoryFroms3(bucketName, remoteDirectoryName):
    s3_resource = boto3.resource('s3')
    bucket = s3_resource.Bucket(bucketName) 
    for obj in bucket.objects.filter(Prefix = remoteDirectoryName):
        if not os.path.exists(os.path.dirname(obj.key)):
            os.makedirs(os.path.dirname(obj.key))
        bucket.download_file(obj.key, obj.key) # save to same path

하지만 해당 질문에 대한 답변으로 대부분 for문을 돌려서 노가다(?) 로 다운받는 형식이였다..

 

boto3를 사용해서 다운받는것 이외 다른 방법을 찾아보았다.

그래서 찾은 것이 cloudpathlib !!

 

 

 

1. 먼저 pip install cloudpathlib 를 통해 설치를 하자

 

2. 다음과 같이 소스코드 작성 해서 실행하자

from cloudpathlib import CloudPath

cp = CloudPath("S3 URL")
cp.download_to("로컬에 다운받을 위치")

(S3 URL 넣는 위치에는 빨간 동그라미 친 버튼을 눌러서 그대로 붙여넣기 해주면 된다.)

 

3. 결과

내가 지정한 디렉토리에 잘 다운받아지는 것을 확인했다

성공적이다!!

 

 

댓글