我想知道是否有办法将 SFTP 服务器上的文件复制到同一 SFTP 服务器上的另一个目录。我想执行此操作,而无需将文件放入客户端,然后将其设置在其他文件夹中。当然,这可以很好地工作,但我想这会产生更多的开销,所以如果可能的话,我想避免这种情况。我目前正在使用基于 JCraft JSch 的 Spring 集成。
到目前为止,我还没有找到任何没有中介的方法来做到这一点。
另一种方法是打开 SSH channel 并仅使用 cp 命令,但在我看来这也不太漂亮。
提前致谢!
最佳答案
核心SFTP协议(protocol)不支持复制远程文件。
有 copy-file
extension to the protocol 草案,但只有少数 SFTP 服务器支持(例如 ProFTPD mod_sftp
和 Bitvise SFTP 服务器)。
在最广泛使用的 OpenSSH SFTP 服务器中,只有最新的 version 9.0 支持它。
而且 JSch 库也不支持它。
<小时/>另请参阅我对 How can I copy/duplicate a file to another directory using SFTP? 的回答
<小时/>因此,不幸的是,实际上在“exec” channel ( ChannelExec
)上使用 cp shell 命令是最好的可用方法(假设您连接到 *nix 服务器并且具有 shell 访问权限)。
如果您没有 shell 访问权限,那么您唯一的选择就是将文件下载到本地临时文件夹并将其上传回新位置(或使用流,以避免临时文件)。另请参阅:
关于java - 使用 Spring 集成/JCraft JSch 在 SFTP 服务器上内部复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37664612/