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

如何使用curl或wget下载文件时按来源URL重命名保存文件?

curl/wget 批量下载链接按来源URL命名方案

curl 和 wget 都可以实现该需求,具体操作如下:


curl 实现方式

curl 没有直接将完整URL转换为平级唯一文件名的单参数,可根据需求选以下两种方案:

  1. 平级文件方案(兼容所有curl版本,命名规则可自定义)
    先给链接列表里所有地址补上http://或https://协议头,存为urls.txt,每行一个链接,执行以下命令即可:
    while read -r url; do
      # 将URL里的冒号、斜杠替换为下划线作为文件名,可自行修改sed规则调整命名格式
      save_name=$(echo "$url" | sed 's#[:/]#_#g')
      curl -fLo "$save_name" "$url"
    done < urls.txt
    
    执行后site1.com/1.txt会保存为https_site1.com_1.txt,site2.com/1.txt会保存为https_site2.com_1.txt,无重名覆盖问题,文件名直接对应来源URL。
  2. 目录结构方案(curl 7.73.0+版本支持)
    不介意生成对应层级目录的话,可以直接用参数实现,不用手写循环:
    sed 's#^#https://#' urls.txt | xargs curl -fLO --create-dirs
    
    命令会自动创建对应域名的文件夹,把不同站点的1.txt存在对应域名目录下,不会覆盖。

wget 实现方式

wget 原生对该场景支持更好,操作更简便:

  1. 目录结构保存(最省事,零额外逻辑)
    先给链接补上协议头,执行以下命令:
    # 临时生成带协议头的链接列表
    sed 's#^#https://#' urls.txt > urls_with_proto.txt
    wget -x -i urls_with_proto.txt
    
    -x参数会强制按照远程URL的主机名、路径创建本地目录,最终site1.com文件夹下存该站点的1.txt,site2.com文件夹下存对应站点的1.txt,和来源完全匹配,无重名问题。
  2. 平级文件保存(所有文件存同一目录,文件名带来源标识)
    不想生成多层目录的话,用简单循环处理即可,逻辑和curl方案一致:
    while read -r origin_url; do
      full_url="https://$origin_url"
      save_name=$(echo "$full_url" | sed 's#[:/]#_#g')
      wget -O "$save_name" "$full_url"
    done < urls.txt
    

注意:由于你要下载的是频繁更新的文件,可以给curl加-z参数、给wget加-N参数,开启时间戳校验,仅下载内容有更新的文件,减少无效重复请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:54:18