gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:27:10 32 4
gpt4 key购买 nike

我想使用 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;

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

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

最佳答案

您似乎假设 SFTP“扩展属性”是 "file system extended attributes" .

他们不是。

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

理论上它们确实可以映射到文件系统扩展属性。但实际上大多数 SFTP 服务器,尤其是最广泛使用的 OpenSSH,根本不支持任何 SFTP 扩展属性,更不用说文件系统扩展属性了。另请参阅Setting the extended file attributes using SSH.NET SftpClient .

<小时/>

如果您还具有 shell 访问权限,您也许可以使用某些 shell 命令来查询属性 - 但这不再是 SFTP 了。

关于java - 使用 JSch 读取 SFTP 服务器上文件的文件扩展属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58301307/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com