尝试使用 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
.不会引发任何错误
您很可能执行了错误的命令。如果要连接到 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
。