首页 > 解决方案 > 使用 JSch 时重命名命令不起作用

问题描述

尝试使用作为 shell 命令执行的 JSch API 重命名文件/文件夹不起作用。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();
  }
}

更新:

标签: javasftpjsch

解决方案


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


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

相反,请使用 SSH 的标准文件管理 API,即SFTPChannelSftp在 JSch 中)。

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

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

推荐阅读