java - SftpChannel.rename 失败,但 mv 命令有效。可能的原因是什么?

标签 java sftp jsch file-rename file-move

我遇到了这个问题,sftpChannel.rename 失败并出现不是很有帮助的错误,我无法找出原因。目标中不存在文件。权限很好,因为 mv 命令有效。我将列出文件和文件夹的权限。有人有什么想法吗?我不必使用该目录,但不知道为什么会失败,这令人沮丧。

这是一段测试代码。 RemoteFile 只是 sftpChannel 的包装器,因此我可以检查文件/目录是否存在并在必要时删除文件或创建目录:

 String file = "/u01/apps/tpms/applstg2/ken_test/TestFile";
 String destDir = "/usr/local/jboss/server/applstg2/backup/"; // Caused by: 4: Failure
 //String destDir = "/u01/apps/tpms/applstg2/ken_test/backup/"; // Success
 RemoteFile remoteFile = new RemoteFile(file, ssh.openSftpChannel());
 remoteFile.rename(destDir + "/TestFile");

这是失败的行:

sftpChannel.rename(file, newName);

这是跟踪(我删除了所有 JUnit 和 sun.reflect 跟踪):

Error renaming file /u01/apps/tpms/applstg2/ken_test/TestFile to /usr/local/jboss/server/applstg2/backup//TestFile
at com.framework.remote.RemoteFile.rename(RemoteFile.java:82)
at com.framework.remote.RemoteFileTest.renameFile(RemoteFileTest.java:56)
Caused by: 4: Failure
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2846)
at com.jcraft.jsch.ChannelSftp.rename(ChannelSftp.java:1923)
at com.framework.remote.RemoteFile.rename(RemoteFile.java:79)

权限:

drwxrwxr-x  2 applstg2 applstg2   4096 May  2 22:09 ken_test
-rw-rw-r-- 1 applstg2 applstg2 61595086 May  1 18:05 TestFile
drwxrwxr-x  2 applstg2 applstg2 4096 May  2 21:57 backup

最佳答案

我敢打赌,您的源路径和目标路径位于不同的卷上,并且 Sftp 服务器无法处理跨卷移动文件,因为这不是简单的重命名。

做一个df -lk或者以其他方式找出两个位置上方的安装点。这是我认为唯一能解释这一点的事情,看看两条路径的顶层有多么不同,这似乎很有可能。

如果是这种情况,我认为您需要使用远程命令执行来执行此重命名/移动... ssh <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d5b3baba95b7b4a7fbb6bab8" rel="noreferrer noopener nofollow">[email protected]</a> mv xxx yyy 。我不确定这是否是您所说的“mv”的意思,或者您现在是否正在服务器本地执行此操作。

关于java - SftpChannel.rename 失败,但 mv 命令有效。可能的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55963018/

相关文章:

java - 为什么 Sorted JLists 还没有成为标准 Swing 库的一部分?

java - 如何使用guacamole进行sftp二次开发

git - Gerrit 项目未复制到 bitbucket,错误 : channel is not opened

java - 在Java中通过SSH隧道运行远程命令

java - 创建一种从数字转换为二进制、字母、矩阵的方法

c# - 我们是否应该使用单例模式来创建连接?

java - 为什么 Observable 类中的方法是同步的?

c# - SFTP 连接 DNS 问题 - System.Net.Sockets.SocketException : The requested name is valid, 但未找到请求类型的数据

sftp - 如何在 SFTP 文件传输期间执行校验和以确保数据完整性?

java - JSch 的公钥身份验证失败,但使用相同的 key 与 OpenSSH 一起使用