使用 SFTP 在同一远程服务器中创建文件夹的副本

Create a copy of the folder within same remote server with SFTP

我正在使用 JSch API 通过 SFTP 连接到远程服务器。我需要将远程服务器中存在的文件夹的副本复制到同一台服务器中。在 JSch 中是否实现了执行此类操作的任何方法?或者好心地给我一个建议来做上面的用例。 (我在 Scala 工作)。

远程复制文件的支持在 SFTP 服务器中很少见。 SFTP 有 copy-file 扩展,但很少 servers/clients 支持它。
参见 draft-ietf-secsh-filexfer-extensions-00

在最广泛的 OpenSSH SFTP 服务器中,只有最新的 version 9.0 才支持它。而JSch根本不支持

备选方案:

  • 下载文件夹并将其重新上传到新位置(纯 SFTP 解决方案)
  • 在“执行”通道中使用 cp 命令(不再是 SFTP,需要 shell 访问权限)

我们不能使用“sftp”通道来完成这个任务,我们必须使用“exec”通道来完成这个任务。使用“exec”通道,我们可以执行 Linux 命令如下,

val command = "mkdir testDir"
val channelExec: ChannelExec = session.openChannel("exec").asInstanceOf[ChannelExec]
channelExec.setCommand(command);
channelExec.connect

通过以下链接获取更多详细信息

http://www.programcreek.com/java-api-examples/index.php?api=com.jcraft.jsch.ChannelExec

http://www.journaldev.com/246/java-program-to-run-shell-commands-on-ssh-enabled-system

http://www.jcraft.com/jsch/examples/Exec.java.html

感谢所有参与者