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



尝试使用 JSch API 重命名文件/文件夹,将它们作为 shell 命令执行是不起作用的。mkdirrmdir工作正常。

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 机器上
  • mvrenrename- 他们都没有工作
  • 我们怎么知道命令不起作用 - 文件夹名称仍然是旧名称。execChannel.getExitStatus()也给了-1.不会引发任何错误

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


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

相反,请使用SSH的标准文件管理API,SFTP(JSch中的ChannelSftp(。

ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();
sftpChannel.mkdir("/path/dir1")
sftpChannel.rename("/path/dir1", "/path/dir2");
sftpChannel.rmdir("/path/dir2");

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

最新更新