如何通过AWS CLI读取文本文件中的文件列表批量上传至S3?
AWS S3 基于指定文件列表批量上传方案
你可以通过xargs(Linux/macOS)或PowerShell管道的方式实现需求,无需手动编写遍历逻辑,仅依赖你准备好的files_to_upload.txt即可完成批量上传。
方案1:Linux/macOS 环境
基础批量上传(保留本地目录结构)
直接通过xargs读取文件列表内容,自动填充到aws cli的cp命令中:
xargs -a files_to_upload.txt -I {} aws s3 --follow-symlinks cp {} s3://<你的桶名>/<目标前缀>/{}
参数说明:
-a files_to_upload.txt:指定从目标文本文件读取待处理内容-I {}:将文件每行的路径内容替换到后续命令的{}位置
如果需要将所有文件上传到S3的同一个目录,不需要保留本地路径结构,可以改用以下命令:
xargs -a files_to_upload.txt -I {} aws s3 --follow-symlinks cp {} s3://<你的桶名>/<目标目录>/$(basename {})
大文件量加速上传
如果待上传文件数量较多,可以添加-P参数开启并行上传,示例为同时启动10个上传任务:
xargs -a files_to_upload.txt -P 10 -I {} aws s3 --follow-symlinks cp {} s3://<你的桶名>/<目标前缀>/
路径含空格兼容方案
如果你的文件路径中包含空格,需要指定换行符为唯一分隔符,避免xargs错误拆分参数:
xargs -d '\n' -a files_to_upload.txt -I {} aws s3 --follow-symlinks cp {} s3://<你的桶名>/<目标前缀>/
方案2:Windows PowerShell 环境
PowerShell下通过管道读取文件内容逐行处理,无需手动写循环:
Get-Content files_to_upload.txt | ForEach-Object { aws s3 --follow-symlinks cp $_ s3://<你的桶名>/<目标前缀>/$_ }
通用注意事项
- 执行前可以添加
--dryrun参数测试命令,只会打印待执行的上传操作不会真实上传,确认路径符合预期后再去掉该参数执行,比如:xargs -a files_to_upload.txt -I {} aws s3 --follow-symlinks cp --dryrun {} s3://<你的桶名>/<目标前缀>/ files_to_upload.txt中的路径建议使用执行命令所在工作目录的相对路径,或者写完整绝对路径,避免出现文件找不到的错误。
可选补充:统一规则文件批量上传
如果你的待上传文件有统一的路径/命名规则,也可以直接用s3 sync的过滤参数实现,无需准备文件列表。比如要上传所有.log后缀的文件,忽略其他文件:
aws s3 sync ./ s3://<你的桶名>/<目标前缀>/ --exclude "*" --include "*.log"
内容的提问来源于stack exchange,提问作者Ahdee
相关产品推荐
相关产品推荐

