前提:

一般情况下对OSS操作都会通过SDK,但是很多情况下对OSS进行简单的上传下载的操作,那么SDK就显得有些臃肿,先要下载sdk包,然后再写些简单的操作脚本,而通过shell脚本就会简单很多。

而且很多场景:线上网站、数据库等,生产出来的网站数据、数据库数据、日志数据都需要来备份,如果备份再本地磁盘,那么没过多久磁盘空间就占用光了,如果是NAS来备份数据,价格又比较贵,如果把数据备份到OSS 低频存储就比较实惠一些。

使用方法:

上传文件到OSS:PUT

#!/bin/bash

host="oss-cn-shanghai.aliyuncs.com" bucket="bucket名" Id="AccessKey ID" Key="Access Key Secret" osshost=$bucket.$host

source="localfilename" dest="objecetename"

resource="/${Bucket}/${dest}" contentType=file -ib ${source} |awk -F ";" '{print $1}' dateValue="TZ=GMT env LANG=en_US.UTF-8 date +'%a, %d %b %Y %H:%M:%S GMT'" stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}" signature=echo -en $stringToSign | openssl sha1 -hmac ${Key} -binary | base64

url=http://${OssHost}/${dest} echo "upload ${source} to ${url}"

curl -i -q -X PUT -T "${source}"
-H "Host: ${OssHost}"
-H "Date: ${dateValue}"
-H "Content-Type: ${contentType}"
-H "Authorization: OSS ${Id}:${signature}"
${url} 下载OSS的文件:GET

#!/bin/bash

host="oss-cn-shanghai.aliyuncs.com" bucket="bucket名" Id="AccessKey ID" Key="Access Key Secret"

osshost=$bucket.$host

source="objecetename" dest="localfilename"

resource="/${bucket}/${source}" contentType="" dateValue="TZ=GMT env LANG=en_US.UTF-8 date +'%a, %d %b %Y %H:%M:%S GMT'" stringToSign="GET\n\n${contentType}\n${dateValue}\n${resource}" signature=echo -en $stringToSign | openssl sha1 -hmac ${Key} -binary | base64

url=http://${osshost}/${source} echo "download ${url} to ${dest}"

curl --create-dirs
-H "Host: ${osshost}"
-H "Date: ${dateValue}"
-H "Content-Type: ${contentType}"
-H "Authorization: OSS ${Id}:${signature}"
${url} -o ${dest}

原文地址: http://blog.daobidao.com/shell-put-get-oss.html