java - 使用 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();
}
}
更新:
- SFTP 服务器托管在 CentOS 机器上
mv
,ren
,rename
- 他们都没有工作- 我们怎么知道命令不起作用 - 文件夹名称仍然是旧名称。也
execChannel.getExitStatus()
给出了-1
。没有错误被抛出
解决方案
您很可能正在执行错误的命令。如果要连接到 Linux,要使用的命令是mv
.
但是,您不应将 shell 命令用于琐碎的文件操作,例如创建和删除目录以及重命名文件/目录。这是一种非常脆弱的方法。
相反,请使用 SSH 的标准文件管理 API,即SFTP(ChannelSftp
在 JSch 中)。
ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();
sftpChannel.mkdir("/path/dir1")
sftpChannel.rename("/path/dir1", "/path/dir2");
sftpChannel.rmdir("/path/dir2");
推荐阅读
- c# - 请解释这个 C# LINQ 语句
- javascript - 如何在同一个 jQuery 函数中使用两个追加?
- java - 有没有办法将 Java8 Optional 返回转换后的值与在 null 上打印消息相结合?
- machine-learning - 有没有办法快速决定哪些变量用于模型拟合和选择?
- r - 栅格化后保留图层名称
- flutter - 如何在 Flutter 中读取 pdf 表格
- python - pandas groupby 删除多个索引
- javascript - 从datalist angularjs获取数据属性值
- javascript - Popper.js 箭头位置在更改其位置时不会改变
- android - Webview 使用简单的 HTML 崩溃并抛出 JNI 错误