亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 Amazon S3、AWS CLI 或 Boto3 下載?

從 Amazon S3、AWS CLI 或 Boto3 下載?

肥皂起泡泡 2021-11-16 15:07:59
我在 txt 文件中有一個文件夾名稱列表,例如:folder_Bfolder_CS3 存儲桶中有一個路徑,其中包含以下文件夾:folder_Afolder_Bfolder_Cfolder_D每個文件夾都有子文件夾,例如:0123對于文本文件中的每個文件夾,我必須在 S3 中找到文件夾并僅下載其子文件夾中編號最高的內容。通過 python boto3 執行此操作似乎很復雜。這是通過 AWS 命令行執行此操作的簡單方法嗎?
查看完整描述

2 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

好的,我做到了。這真的很糟糕,但它有效。我使用了 boto3 和 aws-cli


import subprocess

import boto3


folders = []

with open('folders_list.txt', 'r', newline='') as f:

    for line in f:

        line = line.rstrip()

        folders.append(line)


def download(bucket_name):

    s3_client = boto3.client("s3")

    result = s3_client.list_objects(Bucket=bucket_name, Prefix="my_path/{}/".format(folder), Delimiter="/")

    subfolders = []

    for i in result['CommonPrefixes']:

        subfolders.append(int(i['Prefix'].split('{}/'.format(folder),1)[1][:-1]))

    subprocess.run(['aws', 's3', 'cp', 's3://my_bucket/my_path/{0}/{1}'.format(folder, max(subfolders)),

                    'C:\\Users\it_is_me\my_local_folder\{}.'.format(folder), '--recursive'])


for folder in folders:

    download('my_bucket')


查看完整回答
反對 回復 2021-11-16
?
達令說

TA貢獻1821條經驗 獲得超6個贊

這是一個簡單的 bash one liner(假設 aws s3 ls 的格式將文件名作為最后一列):


for bucket in $(cat folder.txt); do \

  aws s3 ls s3://bucket-prefix/$bucket | awk '{print $NF}' \

  | sort -r | head -n1 \

  | xargs -I {} aws s3 cp s3://bucket-prefix/$bucket/{} $bucket/{} --recursive \

  ; done

如果目錄丟失,aws-cli 會負責創建目錄。(在 Ubuntu 上測試)


查看完整回答
反對 回復 2021-11-16
  • 2 回答
  • 0 關注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號