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

如何在Bash脚本中为curl下载的文件名添加时间戳?

问题解答

1. 能否通过-O选项实现添加日期的需求?

不能直接用-O实现。-O的核心逻辑是直接复用远程服务器返回的文件名(或URL路径的最后一段),没有内置的文件名修改功能。要实现带日期的自定义文件名,必须结合-o选项,但可以先自动获取远程文件名再拼接日期,模拟-O的自动命名逻辑。

2. 添加日期对断点续传-C -的影响

只要本地文件名保持一致,断点续传功能不受影响:

  • curl -C -的工作原理是检查本地文件的大小,向服务器发送Range请求,从已下载的字节位置继续传输。
  • 若同一天内中断后重新运行脚本,生成的带日期文件名一致,curl会自动识别本地文件并续传(前提是服务器支持断点续传)。
  • 若跨天重新运行,文件名的日期部分改变,curl会将其视为新文件,重新开始下载。

3. 兼容Ubuntu和BusyBox的实现方案

步骤1:自动获取远程文件名

优先从响应头的Content-Disposition字段提取文件名,若不存在则从URL路径的最后一段获取:

# 获取远程文件名
remote_filename=$(curl -s --head --location "${HEADERS[@]}" "$url" | awk -F 'filename=' '{if($2) print $2}' | tr -d '"')
# 若未获取到,从URL提取
if [ -z "$remote_filename" ]; then
    remote_filename=$(basename "$url")
fi

步骤2:拼接日期生成新文件名

拆分文件名的名称和后缀部分,添加日期后重组(兼容无后缀的文件名):

current_date=$(date +"%Y-%m-%d") # 匹配你期望的YYYY-MM-DD格式
# 处理文件名
if echo "$remote_filename" | grep -q "\."; then
    name_part=$(echo "$remote_filename" | cut -d. -f1)
    ext_part=$(echo "$remote_filename" | cut -d. -f2-)
    new_filename="${name_part}-${current_date}.${ext_part}"
else
    new_filename="${remote_filename}-${current_date}"
fi

步骤3:带断点续传的curl命令

用-o指定新文件名,保留原有的断点续传和其他参数:

curl --fail -S -C - --location "${HEADERS[@]}" -X GET "$url" -o "$new_filename"

4. 完整脚本示例

#!/bin/sh
# 兼容bash和BusyBox sh

url="你的下载URL"
HEADERS=("-H" "Authorization: Bearer xxx") # 替换为你的实际请求头

# 获取远程文件名
remote_filename=$(curl -s --head --location "${HEADERS[@]}" "$url" | awk -F 'filename=' '{if($2) print $2}' | tr -d '"')
if [ -z "$remote_filename" ]; then
    remote_filename=$(basename "$url")
fi

# 生成带日期的文件名
current_date=$(date +"%Y-%m-%d")
if echo "$remote_filename" | grep -q "\."; then
    name_part=$(echo "$remote_filename" | cut -d. -f1)
    ext_part=$(echo "$remote_filename" | cut -d. -f2-)
    new_filename="${name_part}-${current_date}.${ext_part}"
else
    new_filename="${remote_filename}-${current_date}"
fi

# 执行下载(带断点续传)
curl --fail -S -C - --location "${HEADERS[@]}" -X GET "$url" -o "$new_filename"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:15:19