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

Java SftpChannel.rename失败,但mv命令有效。可能的原因是什么?,java,sftp,jsch,file-rename,file-move,Java,Sftp,Jsch,File Rename,File Move,我遇到了这个问题,sftpChannel.rename失败了,并出现了一个没有多大帮助的错误,我无法找出原因。目标中不存在文件。因为mv命令可以工作,所以权限是可以的。我将列出文件和文件夹的权限。有人知道吗?我不必使用这个目录,但不知道它为什么会失败是令人沮丧的 这是一段测试代码。RemoteFile只是sftpChannel的包装器,因此我可以检查file/dir是否存在,并在必要时删除file或创建dir: String file = "/u01/apps/tpms/applstg2/ke

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

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

 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跟踪):

权限:

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
或以其他方式确定两个位置上方的挂载点。这是我能想到的唯一能解释这一点的东西,看看你们两条路径的顶层有多不同,这似乎是完全可能的


如果是这种情况,我认为您应该使用远程命令执行来执行重命名/移动…
sshfoo@bar.commv xxx yyy
。我不确定这是否是您所说的“mv”的意思,或者您现在是否正在服务器上本地执行此操作。

是的,
df-lk
显示了一个安装在
/u01
上,另一个安装在
/usr
上,以及其他一些安装点。我在那台服务器上的终端上运行
mv
。谢谢,我想我会把方法移到exec频道。非常感谢!
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