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