如何使用AWS CLI从S3存储桶下载指定数量文件?含10个参数传递方法
我来帮你搞定这个问题!用AWS CLI下载指定数量的S3文件,其实可以分两步走:先筛选出你要的文件,再批量下载。下面给你两种实用方法,按需挑选就行~
方法1:用终端命令组合(适合Linux/macOS)
这种方法直接用AWS CLI结合终端工具,不用写脚本,快捷方便。假设你要下载s3://your-bucket-name/里的10个文件,执行下面的命令就行:
# 列出桶内所有非文件夹的文件,取前10个并下载到当前目录 aws s3 ls s3://your-bucket-name/ --recursive | grep -v "/$" | head -n 10 | awk '{print $4}' | xargs -I {} aws s3 cp s3://your-bucket-name/{} .
我给你拆解下每个部分的作用:
--recursive:遍历桶内所有层级的文件(包括子文件夹里的)grep -v "/$":过滤掉文件夹(因为s3 ls输出的文件夹末尾会带/)head -n 10:只保留前10个文件的条目awk '{print $4}':从输出里提取文件名(s3 ls的格式是「日期 时间 大小 文件名」,第4列就是文件名)xargs -I {}:把每个文件名替换到{}的位置,执行s3 cp命令完成下载
如果只想下载某个特定文件夹下的文件,把命令里的s3://your-bucket-name/改成s3://your-bucket-name/path/to/target/folder/就行。
方法2:用Python脚本(跨平台,更灵活)
如果是Windows系统,或者你需要更复杂的筛选逻辑(比如按修改时间排序下载),写个简单的Python脚本会更靠谱。步骤如下:
- 先安装boto3(AWS的Python SDK):
pip install boto3
- 新建一个脚本文件(比如
s3_download_limit.py),复制下面的代码:
import boto3 import os # 配置参数 bucket_name = "your-bucket-name" max_download_count = 10 download_folder = "./s3_downloads" # 创建下载目录(如果不存在) os.makedirs(download_folder, exist_ok=True) # 初始化S3客户端 s3_client = boto3.client("s3") # 分页列出桶内文件(避免一次返回太多数据) paginator = s3_client.get_paginator("list_objects_v2") page_iterator = paginator.paginate(Bucket=bucket_name, Prefix="") # Prefix填文件夹路径可筛选特定目录 downloaded_count = 0 for page in page_iterator: if "Contents" not in page: break # 桶里没文件了,退出循环 for obj in page["Contents"]: if downloaded_count >= max_download_count: break # 跳过文件夹对象 if obj["Key"].endswith("/"): continue # 下载文件到指定目录,保留原文件名 local_file_path = os.path.join(download_folder, os.path.basename(obj["Key"])) s3_client.download_file(bucket_name, obj["Key"], local_file_path) downloaded_count += 1 print(f"已下载:{obj['Key']}") if downloaded_count >= max_download_count: break print(f"\n完成!共下载{downloaded_count}个文件到{download_folder}")
- 修改脚本里的
bucket_name、max_download_count等参数,然后运行脚本:
python s3_download_limit.py
这个脚本的好处是:
- 自动处理S3的分页限制(一次最多返回1000个对象)
- 可以轻松修改筛选逻辑(比如按文件修改时间排序,只下载最新的10个)
- 跨平台,Windows、Linux、macOS都能用
额外小提示
- 如果桶里的文件数量少于10个,两种方法都会自动下载所有存在的文件,不会报错
- 要是想按「最新修改」的顺序下载10个文件,在方法1的
s3 ls命令后加--sort-by lastmodified --reverse(--reverse是让最新的排在前面),然后再用head -n 10筛选就行
内容的提问来源于stack exchange,提问作者purushotham nikhil
相关产品推荐
相关产品推荐

