如何使用wget下载文件并根据http报告的文件名保存?

时间:2013-11-22 16:32:24

标签: bash http-headers wget

当您使用wget请求文件并且该文件由某个动态页面(例如php)提供服务时,wget将尝试使用该动态页面的路径(通常看起来好像一个生气的孩子抓住了您的键盘: index.php?a8s7df6a8s=d6fa8sd6f90v78wg&l45i87ylqwiu45h=j76h2g461k326v)。

但是,这些页面通常会在文件中发送HTTP标头,以便用户代理可以显示合理的文件名。如何让wget听取并使用它(而不是url)来确定保存文件的名称?

1 个答案:

答案 0 :(得分:1)

我发现这样做的方法是将--server-response标志与--spider一起使用并调用wget两次(当然还有改进的余地!)

假设网址位于$link

 wget --quiet --server-response --spider -O /dev/null -- "$link" 2>&1 \
 | sed -n 's/^.*filename=\([^;]*\)\(;.*\)\?$/\1/p' \
 | while read name; do
   wget -O "$name" -- "$link"
   break
 done

似乎对我而言就像是一种魅力。

但可能有一种直接的方法。这会(完全不必要地)创建两个到服务器的连接。