Note#2

S3バケットのファイルをワンクリックでダウンロードできるスクリプトの記録

記録日·言語 中国語 -> 日本語·AI 翻訳
Time Capsule長期的に有効な内容

この記事の最終更新は 1 年 10 か月 前です

AWS SDK(boto3)の標準的で安定したAPIを使用した汎用的なスクリプトであり、特定のバージョン番号、時事問題、または時間経過によって陳腐化しやすい表現が含まれていないため。

boto3list_objects_v2
python
import boto3
import os

# AWSの認証情報とS3バケット情報を設定
aws_access_key_id = 'あなたのAWSアクセスキーID'
aws_secret_access_key = 'あなたのAWSシークレットアクセスキー'
bucket_name = 'あなたのS3バケット名'
endpoint_url = 'あなたのS3エンドポイントURL'

# S3クライアントを作成
s3 = boto3.client(
    's3',
    aws_access_key_id=aws_access_key_id,
    aws_secret_access_key=aws_secret_access_key,
    endpoint_url=endpoint_url
)

# S3バケット内のすべてのファイルリストを取得
objects = s3.list_objects_v2(Bucket=bucket_name)

# ダウンロードしたファイルを保存するディレクトリを作成
download_dir = 'ダウンロードしたファイル'
if not os.path.exists(download_dir):
    os.makedirs(download_dir)

# フォントファイルの拡張子リスト
font_extensions = ['.ttf', '.otf', '.woff', '.woff2', '.eot']

# 各ファイルをダウンロード
if 'Contents' in objects:
    for obj in objects['Contents']:
        key = obj['Key']
        file_path = os.path.join(download_dir, key)
        
        # ファイルが既に存在するか、フォントファイルかをチェック
        if os.path.exists(file_path):
            print(f'既存ファイルをスキップ:{file_path}')
            continue
        
        if any(key.lower().endswith(ext) for ext in font_extensions):
            print(f'フォントファイルをスキップ:{file_path}')
            continue
        
        # ファイルが存在するディレクトリを作成(存在しない場合)
        os.makedirs(os.path.dirname(file_path), exist_ok=True)
        
        # ファイルをダウンロード
        s3.download_file(bucket_name, key, file_path)
        print(f'ファイルをダウンロードしました:{file_path}')
else:
    print('S3バケットにファイルがありません。')

print('すべてのファイルのダウンロードが完了しました。')