当目标路径存在时,curl SFTP 重命名

curl SFTP rename when destination path exists

本文关键字:curl SFTP 重命名 目标路径 存在      更新时间:2023-10-16

我必须使用 SFTP 传输和 libcurl 定期更新服务器上的文件。从许多来源和个人经验中,我发现当目标路径指向已经存在的文件时,使用 curl 和 SFTP 重命名命令会失败。但是 sftp 客户端不是这样工作的 - 相同的命令会覆盖现有文件。难道真的没有办法在 libcurl 上强制这种行为吗?我知道先删除文件的选项,但随之而来的是,如果文件不存在,它就会失败,这对我来说仍然是一种解决方法而不是解决方案。

编辑:libcurl 提出了libssh2_sftp_rename_ex的LIBSSH2_SFTP_RENAME_OVERWRITE标志,但它似乎不适用于某些版本的协议/服务器

解决方法:添加命令"*rm",指出 rm 可能失败

我很确定原因是在 curl 无法通过 SFTP 重命名文件的情况下,这是因为服务器拒绝了它。我们已经看到它有时会被一些服务器发生,即使 curl 发送"强制覆盖"选项。

其他客户端可能工作的原因可能是它们在后台执行 rm + mv,或者可能是因为它们与服务器协商不同的 SFTP 协议版本(从而获得不同的行为)。