【问题标题】:Read file extended attributes of files on SFTP server with JSch使用 JSch 读取 SFTP 服务器上文件的文件扩展属性
【发布时间】:2019-10-09 09:41:59
【问题描述】:

我想使用 com.jcraft.JSch 0.1.55 读取文件扩展属性(文件在 SFTP 服务器上)。我知道SftpATTR这个类实际上确实有一个方法

public String[] getExtended()

但在我的情况下它返回 null。

我在这段代码中看到了

static SftpATTRS getATTR(Buffer buf){
    SftpATTRS attr=new SftpATTRS(); 
    attr.flags=buf.getInt();
    if((attr.flags&SSH_FILEXFER_ATTR_SIZE)!=0){ attr.size=buf.getLong(); }
    if((attr.flags&SSH_FILEXFER_ATTR_UIDGID)!=0){
      attr.uid=buf.getInt(); attr.gid=buf.getInt();
    }
    if((attr.flags&SSH_FILEXFER_ATTR_PERMISSIONS)!=0){ 
      attr.permissions=buf.getInt();
    }
    if((attr.flags&SSH_FILEXFER_ATTR_ACMODTIME)!=0){ 
      attr.atime=buf.getInt();
    }
    if((attr.flags&SSH_FILEXFER_ATTR_ACMODTIME)!=0){ 
      attr.mtime=buf.getInt(); 
    }
    if((attr.flags&SSH_FILEXFER_ATTR_EXTENDED)!=0){
      int count=buf.getInt();
      if(count>0){
    attr.extended=new String[count*2];
    for(int i=0; i<count; i++){
      attr.extended[i*2]=Util.byte2str(buf.getString());
      attr.extended[i*2+1]=Util.byte2str(buf.getString());
    }
      }
    }
    return attr;
  } 

最后一个 if 语句负责读取扩展属性,但在我看来它总是评估为 false,因为

int flags=0;

public static final int SSH_FILEXFER_ATTR_EXTENDED=     0x80000000;

我无法直接更改标志,因为它的设置器没有公共修饰符。

还有其他方法可以更改标志或以某种方式读取扩展属性吗?

【问题讨论】:

  • 您的 SFTP 服务器是否提供任何扩展属性?那是什么服务器?
  • @MartinPrikryl 如果我没记错的话,sftp 服务器是 SSH 包的一部分,它是我的 Centos 7 上的 OpenSSH_7.4p1。我可以看到你已经在 stackoverflow.com/questions/48687079/… 中回答了类似的问题.不幸的是,sftp 服务器似乎不支持文件扩展属性。
  • 这看起来像XY problem。你想实现什么?
  • @MartinPrikryl 好的,我会将 .tar.gz 包发送到 sftp 服务器。我想定期使用 bash 脚本将它们解压到同一个文件夹中。然后我将获得带有 wso2 入站端点的结果文件(这就是要求)。额外的要求是知道它们来自什么 .tar.gz 包。这就是我想存储在扩展属性中的内容。

标签: java sftp jsch file-attributes


【解决方案1】:

您似乎认为 SFTP “扩展属性”"file system extended attributes"

他们不是。

SFTP “扩展属性” 是一种扩展机制,SFTP 服务器可以通过该机制提供或设置有关文件的附加属性,这些属性不属于标准 SFTP 文件属性的一部分。

它们确实可以理论上映射到文件系统扩展属性。但实际上大多数 SFTP 服务器,尤其是最普遍的 OpenSSH,根本不支持任何 SFTP 扩展属性,只支持文件系统扩展属性。 另见Setting the extended file attributes using SSH.NET SftpClient

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 2018-07-08
    相关资源
    最近更新 更多