变量下载

新手上路,请多包涵

当使用wget或者curl碰到这样的一个下载地址怎么批量下载保存呢

http://www.a.com/xyz/a.txt

x y z三个都是变量但最后下载文件的文件名都相同。 比如:

http://www.a.com/123/a.txt 保存文件名为123a.txt
http://www.a.com/321/a.txt 保存文件名为321a.txt
阅读 6.3k
3 个回答

curl自带的变量功能可以达到目的。详细信息请参考man curl

楼主没有明确指出xyz变化的规律。在这里,我假设xyz是一个3位数字。
如果xyz的样本不多,比如,只有{111,123,321}的时候,可以用以下的命令:

curl "http://www.a.com/{111,123,321}/a.txt" -o "#1_a.txt"  

这样就会自动保存下111_a.txt,123_a.txt,321_a.txt 这3个文件。

如果xyz的样本很多,那么需要使用另外一种变量类型[]:

curl "http://www.a.com/[100-999]/a.txt" -o "#1_a.txt"  

这样,curl会遍历从100到999,替换到url中去,并试图保存文件。但最终仍然只会保存事实上存在的文件,即111_a.txt,123_a.txt,321_a.txt

补充

楼主提到xyz的规律是类似于x.y.z这样的。那么可以添加多个变量。比如:

curl "http://www.a.com/[1-2].[0-10].[1-4]/a.txt" -o "#1.#2.#3_a.txt"  

假设你的要下载的 URL 保存在了 urls.txt 文件中。

for url in $(cat urls.txt); do
  name=$(echo $url|grep -o '[^/]\+/a\.txt$'|tr -d '/')
  wget $url -O $name
done
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进