我遇到了将文件从一个 SFTP 文件夹复制(复制)到同一服务器上的另一个文件夹的问题。
所以,问题:有没有一种有效的方法可以远程进行(即不将数据复制到客户端,反之亦然)?
我将 Java 与JSch 库一起使用。
SFTP 协议本身只支持客户端和服务器之间的数据传输,不支持服务器本身。
不过,您可以使用底层 SSH 协议的其他部分(以及 JSch 的实现)在服务器上执行命令。在这种情况下,正如 Joop 所提到的,使用Exec 通道是正确的选择。您可以将用于ChannelSftp的相同会话用于任意数量的其他通道,例如用于您的 exec 通道。只需确保在使用后关闭所有频道。(查看 JSch wiki 上的Shell、Exec 或 Subsystem Channel页面了解更多信息。
如果服务器不支持命令执行,这当然不会起作用,例如,如果它被配置为只支持 SFTP。那么您唯一的解决方案是下载并重新上传此文件。
在 SFTP 中,一个可能执行! ...
的是执行本地命令。
! cp a.txt a-backup.txt
由于 JSch 也可以提供 SSH 连接,即使是感叹号也没有实际意义。对于代码,您可能会在示例中找到一些起点。Exec 示例应该可以。