使用Shell脚本向S3 Bucket上传文件遇logInfo及文件读取报错咨询
问题修复方案
你遇到的报错由三个可直接修复的问题导致:
- logInfo命令不存在:脚本中直接调用了未定义的
logInfo函数,你可以直接替换为系统自带的echo命令,或者在脚本开头新增logInfo函数定义:
function logInfo() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] [INFO] $1" }
- 文件路径配置错误:你写的
files_location=/gri/指向系统根目录下的gri文件夹,而你需要的是当前工作目录下的gri文件夹,修改对应变量为:
files_location=./gri/
- 未定义now_date变量:脚本中仅定义了
now_time变量,但上传路径中用到的now_date没有赋值,补充变量定义即可,示例:
now_date=$(date +"%Y%m%d")
修改后完整脚本示例
bucket=simulation files_location=./gri/ now_time=$(date +"%H%M%S") now_date=$(date +"%Y%m%d") contentType="application/x-compressed-tar" dateValue=`date -R` # 自行填写密钥 s3Key= # CENSORED s3Secret= # CENSORED # 新增logInfo函数定义 function logInfo() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] [INFO] $1" } function pushToS3() { files_path=$1 for file in "$files_path"* do fname=$(basename "$file") logInfo "Start sending $fname to S3" resource="/${bucket}/${now_date}/${fname}_${now_time}" stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}" signature=`echo -en "${stringToSign}" | openssl sha1 -hmac "${s3Secret}" -binary | base64` curl -X PUT -T "${file}" \ -H "Host: ${bucket}.s3.amazonaws.com" \ -H "Date: ${dateValue}" \ -H "Content-Type: ${contentType}" \ -H "Authorization: AWS ${s3Key}:${signature}" \ "https://${bucket}.s3.amazonaws.com/${now_date}/${fname}_${now_time}" logInfo "$fname has been sent to S3 successfully." done } pushToS3 "$files_location"
内容的提问来源于stack exchange,提问作者StressedBoi69420
相关产品推荐
相关产品推荐

