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

shell脚本中如何用单次curl实现响应为0字节时跳过写入文件

解决方案

你可以通过单次请求将内容先写入临时文件、校验大小后再替换原文件的方式彻底消除隐患,全程仅发起一次curl请求,不存在两次请求的时间差问题。

最终实现代码

#!/bin/sh
INCOMING="http://www.example.jp/csv/ranking.csv"
OUTPUT="/var/www/html/csv/ranking.csv"

# 创建临时文件存储下载结果
TEMP_DOWNLOAD=$(mktemp)

# 单次curl请求下载内容到临时文件
curl -s -L "$INCOMING" -o "$TEMP_DOWNLOAD"

# 判断临时文件大小是否非0
if [ -s "$TEMP_DOWNLOAD" ]; then
    # 校验通过才覆盖原文件,mv操作为原子操作,不会损坏原有文件
    mv -f "$TEMP_DOWNLOAD" "$OUTPUT"
else
    # 下载内容为空则直接清理临时文件,不改动原有文件
    rm -f "$TEMP_DOWNLOAD"
fi

方案优势

  • 仅发起1次远端请求,完全避免两次请求间隔内远端文件变更的风险
  • 所有校验操作都针对本次请求返回的实际内容,不会出现校验和实际写入内容不一致的问题
  • 使用mv原子替换原文件,就算替换过程中服务器中断也不会出现原文件损坏、半写入的问题
  • 兼容大体积CSV文件场景,不会占用过多内存

内容的提问来源于stack exchange,提问作者qwe001

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:45:04