远程服务器上有一个 .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
将下载文件的时间设置为与远程相同。