仅当修改时间比本地提取的内容更新时才使用“wget”下载 tarball

仅当修改时间比本地提取的内容更新时才使用“wget”下载 tarball

远程服务器上有一个 .tgz 存档。我只想下载该文件(如果该文件比其本地副本更新)内容我有。如果我保留 .tgz 的旧副本,我就可以使用wget -N.但相反,我只保留提取的内容。如何wget -N在仅保留内容副本的情况下使用等效项?该解决方案应该尽可能跨平台。

我尝试过的一件事是:

  • 将提取的内容存储在唯一的目录中
  • 将目录上的访问/修改时间戳设置为与 tarball 相同
  • 检查新版本时,touch -r <directory> <tarball>使用适当的时间戳创建目标文件的假版本
  • wget -N

但这失败了,因为wget -N检查了文件大小和时间戳,而我的假 tarball 的大小不正确。

答案1

您是否有理由不想保留旧的 tarball?这确实是最简单、最万无一失的方法。

在 Linux 上,您可以dd非常轻松地创建正确大小的文件并用于touch修复时间戳。


在删除 tarball 之前保存时间戳和大小:

wc -c tar.tgz | awk ‘{ print $1 }’ > ref_file
touch -r tar.tgz ref_file

重新创建正确尺寸的假人:

dd of=tar.tgz seek=$(cat ref_file) count=0
touch -r ref_file tar.tgz

答案2

你可以尝试用curl代替wget吗?

$ curl --time-cond <directory> --remote-time --output <tarball> <download_url>

--time-cond可以是时间字符串或文件名。

--remote-time将下载文件的时间设置为与远程相同。

相关内容