我有一个 shell 脚本,它使用 来从列表中下载文件wget
,如果出现任何非严重错误(由于暴风雨期间 WIFI 不稳定),则会自动恢复。
问题是,我想写入一个filename.part
文件,然后在完成后删除 .part 扩展名(此时会处理覆盖等)。这适用于简单的网址,如http://myserver.org/myfile.doc
,但完全无法猜测文件名,如http://myserver.org/index.php?file_id=foo
。 (我的方法会尝试写入index.php.part
而不是所需的结果)
我可以让 wget 自动获取“最终”文件名并写入它,但这不会让我使用使用-O
不同扩展名保存的选项,它没有控制权。
所以我的问题是,是否有任何标准方法(或工具)来获取下载 URL 中的“最终”文件名,以便我可以写入具有相同名称但添加了扩展名的文件? (-O
在wget或curl中使用-o
,例如wget $URL -O "$URL_GUESSED_FILENAME.part"
)
我的工具是 wget 或curl,即使我目前使用 wget,也没有偏好。或者,如果有一种方法可以用Python实现,我也可以接受。
答案1
Wget 可以存储http://myserver.org/index.php?file_id=foo
到服务器提供的文件名中,例如foo.ext
.通常这需要 wget 选项--content-disposition
。如果你想下载,-O foo.ext.part
你需要先了解它。这可以通过首先下载 http 标头来完成,它将包含文件名。
使用 wget,您可以使用如下命令获取相应的标题行:
wget --spider --server-response URL 2>&1 | grep -i content-disposition
您需要对标头进行一些简单的解析来提取文件名。当然这是可选的。如果不存在,那么你就不走运了,wget 将根据index.php
.那时也可以使用它-O
。