You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需下载直接将S3存储桶内文件夹打包为tar.gz文件

结论先说

不存在能完全跳过数据读取、纯靠S3服务端原地把指定前缀打包成tar.gz的CLI命令或官方功能。S3是对象存储,本身只提供对象存取能力,没有内置打包压缩的服务端计算逻辑,所有打包操作都必须经过计算节点完成「读源文件-压缩-写压缩包」的流程。

你不用走全量下载到本地磁盘、本地打包、再重新上传的老三步,通过管道流处理的方式,完全可以跳过文件落盘存储的步骤,全程数据只在内存/管道缓冲区流转,不需要预留和源文件夹等大的本地磁盘空间,下载、压缩、上传三个动作并行执行,效率比老方案高很多。

可直接复用的操作方案

你在任意能访问S3的环境(本地机器、同区域EC2、AWS控制台自带的CloudShell)都可以执行,优先选和S3桶同区域的环境,走S3内网传输不收流量费,速度也最快。
如果是小到中等规模的文件夹(几十GB以内),直接用AWS CloudShell跑就行,不用单独开EC2:

# 1. 先把源文件夹同步到系统内存盘(不写入物理磁盘,重启就自动清除)
aws s3 sync s3://tmp/folder1 /dev/shm/folder1
# 2. 直接从内存盘打包,通过管道流式上传到目标S3路径,不在本地存压缩包
tar -czf - -C /dev/shm folder1 | aws s3 cp - s3://tmp/folder1.tar.gz
# 3. 清理内存里的临时文件
rm -rf /dev/shm/folder1

如果是TB级别的大文件夹,建议用同区域的EC2执行,避免CloudShell会话超时中断。如果不想占内存空间,也可以用逐文件流式读取压缩的命令,全程固定占用几十MB内存就能跑,不需要考虑源文件夹总大小:

aws s3 ls s3://tmp/folder1 --recursive | awk '{$1=$2=$3=""; print substr($0,4)}' | \
tar -czf - --files-from=- --transform="s|^|folder1/|" \
--rsh-command="aws s3 cp s3://tmp/folder1/{} -" | \
aws s3 cp - s3://tmp/folder1.tar.gz

注意点

  • 所有声称能“不下载直接打包S3文件”的第三方工具,本质都是封装了上述流处理逻辑,没有办法做到完全不读取S3源数据就直接生成压缩包
  • 执行命令前确认执行环境有S3对应路径的读写权限,同区域EC2记得绑定有S3权限的IAM角色,不用手动配AK/SK更安全
  • 如果打包过程中出现个别文件读取失败,命令会中断,大文件夹建议提前开screen/tmux会话防止终端断开导致任务失败

内容的提问来源于stack exchange,提问作者Miss_Orchid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 02:24:34