Java 使用JSch时重命名命令不起作用

Java 使用JSch时重命名命令不起作用,java,sftp,jsch,Java,Sftp,Jsch,尝试使用JSch API重命名文件/文件夹,并将其作为shell命令执行,这是无效的mkdir和rmdir工作正常 JDK版本–11。 JSch版本–0.1.55 使用以下代码 ChannelExec execChannel = null; try { execChannel = (ChannelExec) session.openChannel("exec"); execChannel.connect(); execChannel.setCommand(&quo

尝试使用JSch API重命名文件/文件夹,并将其作为shell命令执行,这是无效的
mkdir
rmdir
工作正常

JDK版本–11。
JSch版本–0.1.55

使用以下代码

ChannelExec execChannel = null;
try {
  execChannel = (ChannelExec) session.openChannel("exec");
  execChannel.connect();
  execChannel.setCommand("rename dir1 dir2");
  execChannel.start();
} catch (JSchException ex) {
  throw new IOException(ex);
} finally {
  if (execChannel != null) {
    execChannel.disconnect();
  }
}
更新:

  • SFTP服务器托管在CentOS计算机上
  • mv
    ren
    rename
    -它们都不起作用
  • 我们如何知道该命令不起作用-文件夹名称仍然是旧名称。另外,
    execChannel.getExitStatus()
    给出了
    -1
    。不会抛出任何错误

如果您使用的是Jsch,我相信远程主机是一个类似Unix的系统。Unix中没有命令
rename
。改用
mv

您很可能执行了错误的命令。如果您正在连接到Linux,则要使用的命令是


但是,您不应该将shell命令用于创建和删除目录以及重命名文件/目录等琐碎的文件操作。这是一个非常脆弱的方法

相反,使用SSH的标准文件管理API(在JSch中)

ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();

sftpChannel.mkdir("/path/dir1")
sftpChannel.rename("/path/dir1", "/path/dir2");
sftpChannel.rmdir("/path/dir2");