You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Bash脚本压缩目录后用Curl上传报错:Failed to open/read local data from file/application

Bash脚本压缩目录后用Curl上传报错:Failed to open/read local data from file/application

我最近碰到个头疼的问题:想写个Bash脚本把指定目录压缩后,用curl上传到Web服务器,结果运行时一直报curl的26号错误,明明压缩文件已经生成了,系统却找不到它。先给大家说说我的需求和写的脚本:

我的需求:

  • 备份目录:/opt/ladapter/data
  • 生成的压缩文件:/opt/ladapter/cert_$date_ymd.zip

我写的Bash脚本是这样的:

cert_script="#!/bin/bash

# Variables
echo \"VARIABLES\"
date_ymd=\$(date +\"%Y-%m-%d\")

# Zip
echo \"ZIP\"
rm -f /opt/ladapter/cert_*.zip
zip -r \"/opt/ladapter/cert_\$date_ymd.zip\" /opt/ladapter/data

# Upload
echo \"UPLOAD CERT\"
curl --location 'https://my-api.com/upload' \
    --header 'Authorization: super-secret-password' \
    --form 'file=@\"/opt/ladapter/backup_\$date_ymd.zip\"'
"

echo "$cert_script" | tee -a /opt/ladapter/cert_script.sh
chmod +x /opt/ladapter/cert_script.sh
/opt/ladapter/cert_script.sh

运行后弹出了这个错误:

curl: (26) Failed to open/read local data from file/application

我特意去确认了,压缩后的cert_$date_ymd.zip确实存在,但就是搞不懂为什么curl找不到文件。后来盯着脚本仔细看了半天,终于发现问题——文件名写错了!

压缩步骤生成的是cert_$date_ymd.zip,但curl上传时写的却是backup_$date_ymd.zip,这俩文件名完全不一致,系统自然找不到这个根本不存在的backup_开头的文件。

只需要把curl命令里的文件名改成正确的名称就能解决问题,修正后的上传部分代码如下:

# Upload
echo "UPLOAD CERT"
curl --location 'https://my-api.com/upload' \
    --header 'Authorization: super-secret-password' \
    --form 'file=@"/opt/ladapter/cert_\$date_ymd.zip"'

备注:内容来源于stack exchange,提问作者Europa

火山引擎 最新活动