如何用s3cmd删除占用空间产生费用的失败分段上传任务?
如何用s3cmd删除AWS S3中所有失败的分段上传任务
别担心,完全可以批量删除这些未完成的分段上传任务,以此停止产生额外的存储空间费用——毕竟这些失败任务的分段文件一直占用着S3空间,确实会持续扣费。下面是具体的操作步骤:
步骤1:导出所有分段上传任务到本地文件
首先,把所有未完成的分段上传任务列表导出到一个文本文件里,方便后续处理:
s3cmd multipart s3://my.bucket.name/ > multipart_uploads.txt
记得把my.bucket.name替换成你实际的存储桶名称。
步骤2:生成批量删除命令
接下来,我们需要从导出的文件中提取每个任务的关键信息(存储桶内的对象路径、上传ID),并生成对应的删除命令。
打开multipart_uploads.txt看一下每行的结构,比如你提供的示例行:
... 2019-09-21T02:57:09.000Z s3://my.bucket.name/server1/home/jbloggs/bigfile.tar.gz wsmw7IGcBvy.yssRikscDwxozV0_7iU_YXsgwqR3nQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxkPeUiWMp3G6NMWOemaIcWjYA5XaGaiqz09WJKnQRzJIAtQ
这里第4个字段是对象的完整S3路径,第5个字段是上传ID。我们可以用awk命令来提取这些信息并生成删除脚本:
awk '{print "s3cmd abortmpu " $4 " " $5}' multipart_uploads.txt > delete_mpus.sh
注意事项:
- 如果你的任务列表行结构和示例不同,需要调整
awk中的字段序号(比如$4、$5可能要改成$3、$4之类的,根据实际输出调整)。 - 先运行
awk '{print "s3cmd abortmpu " $4 " " $5}' multipart_uploads.txt查看生成的命令是否正确,确认没问题再写入脚本文件。
步骤3:执行批量删除
给生成的脚本添加执行权限,然后运行它:
chmod +x delete_mpus.sh && ./delete_mpus.sh
更快捷的管道方式(无需生成文件)
如果你不想生成中间文件,可以直接用管道一次性完成:
s3cmd multipart s3://my.bucket.name/ | awk '{print "s3cmd abortmpu " $4 " " $5}' | bash
同样,建议先去掉最后的| bash,预览命令是否正确后再执行。
额外提醒
- 确保你的s3cmd配置有足够的权限:需要拥有
s3:AbortMultipartUpload权限,否则删除操作会失败。 - 如果任务数量非常多,可能会触发AWS的API请求限流。可以在脚本中加入短暂延迟(比如在每个删除命令后加
sleep 0.1),或者分批次执行脚本。 - 作为备选,你也可以用AWS CLI来完成这个操作,比如用
aws s3api list-multipart-uploads列出任务,结合jq解析后用aws s3api abort-multipart-upload删除,但如果你更习惯s3cmd,上面的方法就足够了。
内容的提问来源于stack exchange,提问作者Paul Littlefield
相关产品推荐
相关产品推荐

