使用shell脚本方式递归上传文件及文件夹到阿里云oss指定目录

使用说明及注意:

  1. 脚本里面的accessKeyId和AccessSecret别泄露
  2. 运行命令格式:sh aliyunOss.sh 本机源文件夹 oss目的文件夹
  3. 两个参数【本机源文件夹】【oss目的文件夹】的前后不要有斜杠
  4. 此脚本运行后直接上传在脚本里面topDirName配置的目录下的
  5. 示例:如【本机源文件夹】的是:dist/static,【oss目的文件夹】:dir1/dir2,则会在oss下创建dir1/dir2目录,并且源文件夹dist/static在dir2文件夹。运行命令如:sh aliyunOss.sh dist/static dir1/dir2
#!/bin/bash
#oos全局参数配置 !!!!!!!!!!勿泄漏!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
host="oss-cn-shenzhen.aliyuncs.com"
bucket="xxxxxxxxx" # BucketName
accessKeyId="xxxxxxxxx" # AccessKeyId
AccessKeySecret="xxxxxxxxx" # AccessKeySecret
osshost=$bucket.$host
topDirName=xxxx #桶的顶级目录名,不写的话直接上传到桶的根目录

#第一个参数是文件或文件夹
sourceFileOrDir=$1
#第二个参数是需要传到oss的目录,相对于上面topDirName的目录下的,不传这个参数则直接传到topDirName设置的目录下
destDir=$2

#上传到oss文件对象个数计数,文件夹也算一个对象
uploadOssObjectCount=0

#需要两个参数
#第一个入参:源文件,如a.txt
#第二个入参:上传oss的指定的目录下面
function uploadFileToOss(){
  cur_source=$1
  cur_dest=$2
  echo "正在上传【${cur_source}】到oss【${cur_dest}】......."
 
  resource="/${bucket}/${topDirName}/${cur_dest}"
  contentType=`file -ib $cur_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 ${AccessKeySecret} -binary | base64`


  url=http://${osshost}/${topDirName}/${cur_dest}
  echo "upload ${cur_source} to ${url}"

  responseContent=`curl -i -q -X PUT -T "${cur_source}" \
    -H "Host: ${osshost}" \
    -H "Date: ${dateValue}" \
    -H "Content-Type: ${contentType}" \
    -H "Authorization: OSS ${accessKeyId}:${signature}" \
    ${url}`;
  uploadOssObjectCount=`expr $uploadOssObjectCount + 1`;
}

#检索参数指定的待上传的目录,上传到指定的oss目录下
function recursion_dir(){
	curPath=$1
	for pathname in "$curPath"/*
	do
	 if [ -d "$pathname" ]
         then
	   recursion_dir "$pathname"
	 else
	   #echo "pathname:${pathname}"
	   uploadFileToOss "${pathname}" "${destDir}/${pathname}"
	 fi
	done
}

#判断上传的是目录还是文件
if [ -d $sourceFileOrDir ]
then
 #调用文件夹上传
 recursion_dir $sourceFileOrDir
else
  #直接调用oss上传
  uploadFileToOss $sourceFileOrDir "$destDir/$sourceFileOrDir"
fi

echo "上传完成:总共上传${uploadOssObjectCount}个对象到OSS"

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿来小同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值