Search code examples
javasftpjsch

How do I copy files stored in a remote SFTP server to another folder in the same remote server using Java?


I have been trying to copy few selected files (after performing few checks), in a remote server to the same remote server using:

File localFile = new File(srcPath);
sftpChannel.put(localFile.getAbsolutePath(),localFile.getName());

I have even tried to copy those selected files to my local machine using the get() method.

Can somebody help?


Solution

  • A core SFTP protocol does not support duplicating a remote file.

    There's draft of copy-file/copy-data extensions to the protocol. But those are supported by only few SFTP servers. In the most widespread OpenSSH SFTP server it is supported only by very recent version 9.0. Other servers are for example ProFTPD mod_sftp and Bitvise SFTP server.

    The JSch library does not support the extensions.

    Alternatives:

    • If you have a shell access, open an "exec" channel, and use shell cp command (or equivalent command for your server's OS).
      See Exec.java example.
    • Otherwise, your only option is to download the file to a local temporary location and upload its copy back to a different/target remote directory. Or use streams, to avoid a temporary file.

    See also How can I copy/duplicate a file to another directory using SFTP?