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




