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

如何用curl -O引用URL中相同变量实现对应文件批量下载

解决curl批量下载时URL中两处数字同步的问题

没问题,这个其实是curl批量范围展开的常见小坑~你之前用的curl -O http://example.com/host/file[001-100]/file[001-100]_[0001-0100].jpg之所以会生成无效URL,是因为curl会独立展开每个方括号里的范围,相当于把file编号的所有组合都列出来了,自然会出现file001对应file002的情况。

要让URL中两处file后的数字严格一致,最靠谱的方式是用shell循环来绑定这两个数字,给你几个实用的方案:

方案1:Bash/Zsh循环+curl范围展开

这个方法最简洁,用循环遍历每个file编号,在循环内保证两处数字一致,同时让curl处理图片的编号范围:

Bash环境(需要seq命令)

for num in $(seq -w 1 100); do
  curl -O "http://example.com/host/file${num}/file${num}_[0001-0100].jpg"
done

Zsh环境(无需额外工具)

Zsh支持直接生成带前导零的序列,写法更简单:

for num in {001..100}; do
  curl -O "http://example.com/host/file${num}/file${num}_[0001-0100].jpg"
done

这里seq -w(或者Zsh的{001..100})会生成带前导零的数字序列(001、002…100),循环里的${num}会同步替换URL中两处的file编号,curl再负责展开图片的0001到0100范围,完全不会出现不匹配的情况。

方案2:生成URL列表后批量下载(适合大数量并行)

如果要下载的文件特别多,想让curl并行处理提升效率,可以先把所有正确的URL生成到一个文件,再用curl批量读取:

# 生成所有有效URL到列表文件
for num in $(seq -w 1 100); do
  for img_num in $(seq -w 1 100); do
    echo "url = http://example.com/host/file${num}/file${num}_${img_num}.jpg"
  done
done > download_list.txt

# 用curl批量下载(加-Z可以开启并行)
curl -Z -K download_list.txt

这个方法的好处是可以通过-Z参数让curl同时下载多个文件,比循环逐个调用curl效率更高,还能方便地查看/修改要下载的URL列表。

核心思路就是用循环把需要同步的数字绑定在一起,毕竟curl的范围展开是无关联的,没法直接让两个位置的数字一一对应,用shell循环就能完美解决这个问题啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:22:35