当目标路径存在时卷曲 SFTP 重命名

curl SFTP rename when destination path exists

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

编辑: libcurl 提高了 libssh2_sftp_rename_ex 的 LIBSSH2_SFTP_RENAME_OVERWRITE 标志,但它似乎不适用于 protocol/server

的某些版本

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

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

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