You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:54:08