wget - 使 wget 覆盖文件(如果已存在)并每次下载它,无论它在远程服务器上是否被更改

标签 wget

当我执行 wget 两次时,它不会覆盖文件,而是在名称后附加一个 .1。

$ wget https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png’
...

$ wget https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png.1’
...

我想让wget覆盖logo.png文件:

  • 不管它是否已经存在
  • 不管它是否在远程服务器上没有改变,都希望重新下载它(不能使用 -N 标志)
  • 无论文件大小是否相同,每次都使用 wget 下载并替换。
  • 不在名称末尾附加 .1。始终保持相同的名称 (logo.png)
  • 不能使用 cURL 或其他东西。
  • 最好不要使用 -O 标志,因为我想保留文件的原始名称。

还有办法吗?我搜索了但找不到示例?

最佳答案

有一种方法可以使用 wget 选项来做到这一点,但它有点 hack:

wget --page-requisites --no-host-directories --cut-dirs=1000 URL

解释:

  • --page-requisites 强制下载,破坏现有文件,但创建树状层次结构
  • --no-host-directories 阻止 wget 创建以 URL 中的主机命名的顶级目录
  • --cut-dirs=1000 剪切第1000个目录组件,有效地将下载的文件放在当前目录

另一个不太复杂的解决方案是为此创建一个 bash 函数:

wget_clobber() {
    local url=${1:?First parameter is a URL}
    wget --output-document="${url##*/}" "$url"
}

解释:我们只是使用--output-document(或-O)强制wget写入以以下命名的文件URL 的最后一部分(${url##*/> 等同于 $(basename "$url"),您也可以使用后者)。

关于wget - 使 wget 覆盖文件(如果已存在)并每次下载它,无论它在远程服务器上是否被更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63149792/

相关文章:

linux - 如何从shell检测wget的下载速度为零

linux - 如何拉取https协议(protocol)网站的源代码

php - 使用wget远程登录

c - 某些情况下的段错误(核心已转储)

linux - Wget 错误 : HTTP request sent, 等待响应... 401 未授权授权失败

javascript - PhantomJS 页面转储脚本问题

ftp - wget ".listing: No such file or directory"

ftp - 从FTP网站下载数据

linux - 如何使用 wget 与 .txt 文件中的许多 URL 下载并另存为

mobile - 从命令行使用 Azure 移动服务进行测试