首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jscape sftp上传保持文件权限

问jscape sftp上传保持文件权限
EN

Stack Overflow用户
提问于 2015-06-30 11:29:19
回答 2查看 660关注 0票数 7

我正在使用jscape sftp传输文件

代码语言:javascript
复制
com.jscape.inet.sftp.Sftp

Sftp sftpSession = null;

// after the required step to connect
// through SshParameters

sftpSession.setDir(remotedirectory);
sftpSession.upload(localFile, remoteFile);

现在,这段代码正在传输文件,这部分可以。但是远程计算机中的文件权限正在发生变化(它正在变成644)。

代码语言:javascript
复制
in local machine:    
-rw-rw-r-- 1 oracle dba  356 Jun 30 03:33 file1.test
-rwxrw-r-x 1 oracle dba  462 Jun 30 03:35 file2.test

in remote machine:
-rw-r--r-- 1 oracle dba  356 Jun 30 03:49 file1.test
-rw-r--r-- 1 oracle dba  462 Jun 30 03:49 file2.test

我看到以下更改远程文件权限的方法,

com.jscape.inet.sftp.Sftp.setFilePermissions(java.lang.String remoteFile, int permissions)

我的问题是,

  • com.jscape.inet.sftp.Sftp.upload方法是否只以这种方式工作,在不保留权限的情况下上传文件?
  • 在不显式使用setFilePermissions方法的情况下,是否存在保留权限的方法?
EN

回答 2

Stack Overflow用户

发布于 2015-07-12 14:45:23

远程上的用户和组是否与本地用户和组具有相同的权限到正在上载的目录?您可以尝试使用getPermissions()方法获得本地权限,并将其设置为远程文件。

票数 5
EN

Stack Overflow用户

发布于 2015-07-13 07:05:18

使用Java 7+,您可以这样做;下面的代码当然假设了一个与您的设置类似的设置,即它在两端都兼容POSIX文件系统。

诀窍是获取对文件的POSIX文件权限集;这是使用以下方法完成的:

代码语言:javascript
复制
// "fileToCopy" here is a Path; see Paths.get()
Files.getPosixFilePermissions(fileToCopy)

这将返回一个Set<PosixFilePermissions>,它实际上是一个枚举。使用以下技巧将枚举转换为整数:

代码语言:javascript
复制
private static int toIntPermissions(final Set<PosixFilePermission> perms)
{
    int ret = 0;
    for (final PosixFilePermission perm: PosixFilePermission.values()) {
        if (perms.contains(perm))
            ret++; // add 1
        ret <<= 1; // shift by 1
    }
    return ret;
}

至于直接保留副本上的权限,这在一个命令中是不可能的: SSH不能保证远程端的文件系统支持这些权限,但它确实承认存在这样的文件系统,这就是为什么它提议一个专用命令来显式地设置远程终端的权限。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31137053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档