S3cmd 是一款免费的命令行工具和客户端,用来上传、下载和管理亚马逊 S3 对象存储以及其他兼容 S3 协议的对象存储(例如 Google Cloud Storage、DreamHost DreamObjects)上的数据。

由于它是命令行下的程序,因此更适合对命令行比较熟悉的用户使用。结合 cron 计划任务,s3cmd 也是理想的自动化备份数据到 s3 的脚本方案。

S3cmd 用 Python 语言写成,采用 GNU Public License v2 (GPLv2) 协议开源,商业和个人均可免费使用。

安装 s3cmd

使用 pip 是最理想的安装方式:

$ pip install s3cmd

使用

创建 s3cmd 配置文件

s3cmd 默认读取 ~/.s3cfg 作为配置文件,也可以直接在命令中指定参数。

可以直接通过程序的交互式命令创建配置文件:

$ s3cmd --configure

也可以手动创建配置文件:

$ nano ~/.s3cfg

# Setup endpoint: hostname of the Web App
# 阿里云
#host_base = oss-cn-shanghai.aliyuncs.com
#host_bucket = %(bucket)s.oss-cn-shanghai.aliyuncs.com
# 京东云
host_base = s3.cn-south-1.jcloudcs.com
host_bucket = %(bucket)s.s3.cn-south-1.jcloudcs.com

# 是否使用 https 协议
use_https = True

# 访问 API 的 ID 和 密钥
access_key =  ABCDEFGSDFSDF
secret_key = HIJKLMNOPQRSTUVWXYZ000011111

列出 buckets 中的文件

假设有一个名为 getnas 的 bucket

$ s3cmd ls s3://getnas
                       DIR   s3://getnas/images/
2018-08-29 04:14     65045   s3://getnas/Snip20180828_11.png
2018-08-29 04:14    102944   s3://getnas/Snip20180828_12.png
2018-08-29 04:14    236808   s3://getnas/Snip20180828_13.png
2018-08-29 04:14     66786   s3://getnas/Snip20180828_14.png

上传文件或目录

上传文件到 bucket 下的 images 目录中:

$ s3cmd put test.jpg s3://getnas/images/

上传目录 videos 到 bucket 根目录:

$ s3cmd put -r videos s3://getnas

兼容 S3 协议的对象存储

**提示:**京东云 OSS 对象存储新版 API 开始兼容 S3 协议,兼容 S3 协议的 Endpoint 为 s3.cn-south-1.jcloudcs.com,不是默认的 oss.cn-south-1.jcloudcs.com。即超链接中的 oss 修改为 s3

Reference