我想使用 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;
and
public static final int SSH_FILEXFER_ATTR_EXTENDED= 0x80000000;
我无法直接更改标志,因为它的设置器没有公共修饰符。
是否有另一种方法可以更改标志或以某种方式读取扩展属性?
您似乎认为 SFTP“扩展属性” are “文件系统扩展属性” https://en.wikipedia.org/wiki/Extended_file_attributes.
他们不是。
SFTP “扩展属性”是一种扩展机制,SFTP 服务器可以通过该机制提供或设置有关文件的附加属性,这些属性不属于标准 SFTP 文件属性的一部分。
他们确实可以理论上映射到文件系统扩展属性。但实际上大多数 SFTP 服务器,尤其是最广泛使用的 OpenSSH,根本不支持任何 SFTP 扩展属性,更不用说文件系统扩展属性了。
也可以看看使用 SSH.NET SftpClient 设置扩展文件属性 https://stackoverflow.com/q/48687079/850848.
如果您还有 shell 访问权限,您也许可以使用某些 shell 命令来查询属性 – 但这不是SFTP不再了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)