使用 JSch 读取 SFTP 服务器上文件的文件扩展属性

Read file extended attributes of files on SFTP server with JSch

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

public String[] getExtended()

但在我的情况下 returns 无效。

我在这段代码中看到了

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;

我无法直接更改标志,因为它 setter 没有 public 修饰符。

是否有另一种方法来更改标志或以某种方式读取扩展属性?

您似乎假设 SFTP "extended attributes""file system extended attributes"

他们不是。

SFTP "extended attributes" 是一种扩展机制,通过它 SFTP 服务器可以提供或设置文件的附加属性,这些属性不是标准 SFTP 文件的一部分属性。

它们确实可以理论上 映射到文件系统扩展属性。但实际上大多数 SFTP 服务器,尤其是最广泛使用的 OpenSSH,根本不支持任何 SFTP 扩展属性,只支持文件系统扩展属性。 另见