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

时间:2019-05-03 03:43:29

标签: 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

1 个答案:

答案 0 :(得分:3)

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

执行df -lk或以其他方式找出您的两个位置上方的挂载点。我认为这是唯一可以解释这一点的东西,再看看两条路径的顶层之间有何不同,似乎很有可能。

如果是这种情况,我想您想使用远程命令执行来执行此重命名/移动... ssh foo@bar.com mv xxx yyy。我不确定这是否是“ mv”的意思,或者您现在是否正在服务器上本地进行此操作。