如何仅用Curl实现文件已存在时返回错误而非覆盖?
仅用curl实现文件存在时返回错误而非覆盖
嘿,这个需求其实是可以实现的,不过要分curl版本来看:
1. 推荐方案:用--no-clobber选项(curl 7.83.0及以上)
从curl 7.83.0版本开始,官方专门添加了--no-clobber(短选项是-nc)参数来解决“避免覆盖已存在文件”的问题。只要在命令里加上这个参数,当本地目标文件已经存在时,curl会直接终止并返回错误,绝对不会覆盖原文件。
举个实际的命令例子:
curl --no-clobber https://your-target-url/file -o file
如果本地已经有file这个文件,curl会输出类似这样的错误提示:
curl: (23) Failed writing output to destination
同时返回非零的退出码,完全符合你想要的“返回错误提示而非覆盖”的要求。
2. 旧版本curl的替代方案(7.83.0以下)
如果你的curl版本比较旧,没有--no-clobber选项,也可以通过间接的方式实现类似效果——利用curl的时间条件选项-z配合--fail,强制curl在文件存在时拒绝下载并返回错误:
命令示例:
curl --fail -z "@99991231235959" https://your-target-url/file -o file
原理说明:
@99991231235959是一个远未来的时间戳,curl会检查远程文件的修改时间是否晚于这个时间(显然不可能)。- 根据
-z选项的规则,只有当本地文件不存在时,curl才会执行下载;如果本地文件已存在,curl会判定“无需更新”,加上--fail选项后就会返回非零退出码并抛出错误。
这个方法虽然不是专门为“避免覆盖”设计的,但能达到你要的核心效果:文件存在时不覆盖,且返回错误提示。
内容的提问来源于stack exchange,提问作者Armand Grillet
相关产品推荐
相关产品推荐

