在 shell 脚本中从 URL 下载之前预测文件名

在 shell 脚本中从 URL 下载之前预测文件名

我有一个 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

相关内容