wget - 使用 wget 覆盖文件但使用临时文件名直到收到完整文件,然后重命名

标签 wget file-rename

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

我已经阅读了 wget 手册页,似乎没有用于此的命令行选项。我错过了吗?或者我需要在我的 cron 工作中执行两个命令,一个 wget 和一个移动?

最佳答案

没有办法完全使用 GNU Wget 来做到这一点。
wget的工作是下载文件,它就是这样做的。一个简单的单行脚本可以实现您的需求:

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

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

关于wget - 使用 wget 覆盖文件但使用临时文件名直到收到完整文件,然后重命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19573790/

相关文章:

c# - 防止用户删除、 move 或重命名文件

linux - 如何 grep 特定行

linux - 我如何编写一个 bash 脚本来从文件中提取所有 http ://whatever. com/something

python-3.x - 某些 'utf-8'编解码器无法解码字节

发送 HEAD 请求时 cURL 挂起 15 秒

c++ - 重命名()返回-1。如何知道重命名失败的原因?

linux - 如何在 Linux 中重命名大量文件并更改每个文件的相同文件名元素?

linux - shell脚本重命名

regex - 删除部分文件名

linux - 为什么这个文件没有下载到指定位置?