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

本文介绍了一个使用阿里云OSS的脚本,指导如何安全地通过`accessKeyId`和`AccessSecret`上传文件到指定目录,强调了敏感信息保密的重要性,并提供了上传示例和命令格式。
部署运行你感兴趣的模型镜像

使用说明及注意:

  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"

您可能感兴趣的与本文相关的镜像

GPT-oss:20b

GPT-oss:20b

图文对话
Gpt-oss

GPT OSS 是OpenAI 推出的重量级开放模型,面向强推理、智能体任务以及多样化开发场景

### 递归复制 root 目录下的所有文件文件夹到 tmp 目录的方法 要实现递归复制 `/root` 目录下的所有文件文件夹到 `/tmp` 目录,可以使用 `cp` 命令的 `-r` 参数(表示递归复制)。以下是一个完整的 Shell 脚本示例[^1]: ```bash #!/bin/bash # 检查目标目录是否存在,如果不存在则创建 if [ ! -d "/tmp/root_backup" ]; then mkdir -p /tmp/root_backup fi # 使用 cp 命令递归复制 /root 下的所有内容到 /tmp/root_backup cp -r /root/* /tmp/root_backup/ # 检查是否成功复制 if [ $? -eq 0 ]; then echo "成功将 /root 的所有内容递归复制到 /tmp/root_backup" else echo "复制过程中发生错误,请检查权限或路径是否正确" fi ``` #### 注意事项 - 如果 `/root` 目录下没有内容,脚本不会报错,但目标目录中也不会有新文件生成。 - 确保当前用户有足够的权限访问 `/root` 和写入 `/tmp`。如果权限不足,可以使用 `sudo` 提升权限[^1]。 - 使用 `mkdir -p` 创建目标目录时,如果目录已经存在,不会报错。 ### 示例运行 假设 `/root` 目录下有以下结构: ``` /root/ ├── file1.txt ├── file2.txt └── subdir/ └── file3.txt ``` 执行上述脚本后,`/tmp/root_backup` 的内容将为: ``` /tmp/root_backup/ ├── file1.txt ├── file2.txt └── subdir/ └── file3.txt ``` #### 错误处理 在实际运行中可能会遇到语法错误、命令错误或逻辑错误。例如: - **语法错误**:脚本中的语法问题可以通过 `bash -n script.sh` 检查[^1]。 - **命令错误**:如果命令拼写错误或路径不正确,可以使用 `bash -x script.sh` 观察执行过程[^1]。 - **逻辑错误**:确保脚本逻辑符合预期,同样可以使用 `bash -x script.sh` 进行调试。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿来小同学

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

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

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

打赏作者

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

抵扣说明:

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

余额充值