10

我在 cron 作业中使用 wget 每分钟一次将 .jpg 文件提取到 Web 服务器文件夹中(每次使用相同的文件名,覆盖)。该文件夹是“实时”的,因为 Web 服务器也从那里提供该图像。但是,如果有人在获取图像期间浏览该页面,则将其视为带有错误的 jpg 并在浏览器中显示。所以我需要做的是,类似于 Firefox 下载文件时,wget 应该写入一个临时文件,无论是在 /var 还是在目标文件夹中但使用临时名称,直到它拥有全部内容,然后重命名一个原子(或至少可忽略的持续时间)步骤。

我已阅读 wget 手册页,但似乎没有命令行选项。我错过了吗?还是我需要在我的 cron 工作中执行两个命令,一个 wget 和一个 move?

4

1 回答 1

2

纯粹使用 GNU Wget 无法做到这一点。

wget的工作是下载文件,它就是这样做的。一个简单的单行脚本可以实现您正在寻找的内容:

$ wget -O myfile.jpg.tmp example.com/myfile.jpg && mv myfile.jpg{.tmp,}

由于mv是原子的,至少在 Linux 上,您可以获得就绪文件的原子更新。

于 2018-05-17T14:11:35.287 回答