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

2024-02-20

我想使用 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(使用前将#替换为@)

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

随机推荐

  • 在函数中使用全局变量

    如何在函数内创建或使用全局变量 如何在一个函数中在其他函数中使用定义的全局变量 Failing to use the global keyword where appropriate often causes UnboundLocalErr
  • PostgreSQL 自定义异常?

    在 Firebird 中我们可以像这样声明自定义异常 CREATE EXCEPTION EXP CUSTOM 0 异常 自定义异常 这些存储在数据库级别 在存储过程中 我们可以像这样引发异常 异常 EXP CUSTOM 0 PostgreS
  • Cakephp - HABTM 记录不会在唯一设置为 true 时删除

    CakePHP 的默认值 unique 设置为 true 我对其进行编码也是为了确保这一点 所以我有以下数据库结构 项目 HABTM 操作 将 unique 设置为 true 情况如下 当我删除 1 条或多条记录时 如果至少 1 条记录保持
  • 有没有办法从 Java Play 2 框架中的数据库生成代码?

    有谁知道如何在 Play Framework 2 0 中轻松地从数据库生成代码 我知道他们有一个模块 但似乎这是 1 X 版本的 Anyone CRUD 模块仅适用于 Play 1 2 x 在 Play 2 0 中不可用 它可能会在 Pla
  • C++ 中的 exit 和 std::exit 有什么区别?

    有什么区别exit and std exit在 C 中 我已经研究过但我找不到任何东西 这两个代码有什么区别 1 if SDL Init SDL INIT EVERYTHING 0 std cout lt lt Error Can t in
  • 实例变量何时初始化并赋值?

    实例变量什么时候初始化 是在构造函数块完成之后还是之前 考虑这个例子 public abstract class Parent public Parent System out println Parent Constructor init
  • 如何在cmd中显示每个进程的CPU使用率

    我想要一个 cmd windows 命令来显示所有进程以及每个进程的 cpu 百分比 有一个命令可以给我这个结果吗 你能帮我吗 谢谢 Try pslist http technet microsoft com en us sysintern
  • 访问回收站

    我想检查回收站中的文件 就像它是一个普通目录一样 特别是获取那里的文件列表以及每个文件到达回收站的日期 这段代码可以帮助你 Access the recycle bin folder Dim SH As New Shell32 Shell
  • Python 3.6 中的 f 字符串调试简写

    下列适用于 Python 3 8 https stackoverflow com questions 59661904 what does equal do in f strings inside the expression curly
  • 尝试删除最后一个元素时,带有子项的 SwiftUI (2.0) 列表崩溃

    我有以下带有子项的 SwiftUI 列表的代码 改编自另一个 StackOverflow 答案 SwiftUI 2 0 带有子项的列表 如何使披露按钮的可点击区域覆盖整个列表项 https stackoverflow com questio
  • 校准图像以获得位于同一平面上的点的顶视图

    校准 我已经使用 Matlab 中的视觉工具箱校准了相机 我使用棋盘图像来做到这一点 校准后我得到了cameraParams 其中包含 Camera Extrinsics RotationMatrices 3x3x18 double Tra
  • Angular 5 材质小吃栏仅针对自定义错误处理无法正确显示,否则工作正常

    Angular 5 材质 材质小吃栏仅针对自定义错误处理无法正确显示 否则工作正常 我试图使用材料小吃栏显示我的后端错误 问题是第一次被触发时 它出现在错误的位置 不是应有的底部中间 而是在左侧 并且它永远留在那里而不会消失 根据我的配置
  • 单击时弹出窗口中出现错误微调器

    我的应用程序如果有一个按钮 一个弹出窗口 有两个旋转器 那么我就可以在那里弹出窗口 但是当我单击旋转器时出现错误 这里有我的下面的代码和调试 因为 logcat 我一切都正确 public void a adirRegistro View
  • 根据另外 2 个表的联接结果插入到一个表中

    我在 MySQL 中有 3 个表 def table spot table tag mapping spot table def table tag id tag ja 2010490043 鉄道 2010680003 american f
  • 从动态名称获取 PHP 枚举

    我正在尝试从动态名称创建 php 8 1 枚举 看来不可能 所以给定一个枚举 enum Foo case bar 当然还有以下作品 Foo bar虽然这不会 name bar Foo name 这会导致 访问未声明的静态属性 App Con
  • 使用批处理检查互联网连接

    因此 最近我的互联网连接确实不太令人满意 因此我正在尝试收集尽可能多的数据 以了解中断的时间和持续时间 我尝试了一些 连接监控 程序 但它们没有按照我想要的方式工作 所以我决定制作一个 我是一个十足的菜鸟 但通过过去一个小时的谷歌搜索 我想
  • Mathematica 中的空值和非空值测试

    在 Mathematica 中测试某个值是否为 Null 的最佳 最干净 建议的方法是什么 并且不为空 例如 a Null b 0 f n If n Null 1 2 f a f b 结果是 1 If 0 Null 1 2 我本来期望 f
  • 如果我们知道一个CFG只生成正则语言,那么我们能得到对应的正则表达式吗?

    众所周知 给定一个正则语法 我们有算法来获取它的正则表达式 但是如果给定的语法是上下文无关语法 但它只生成常规语言 就像 S gt aAb A gt bB B gt cB d 有没有现有的算法可以得到通用的正则表达式 Thanks 从最一般
  • “'dimnames' [1] 的长度不等于数组范围”是什么意思?

    我有一个 data frame 我可以使用 matplot 绘制它 gt dim lhbyzone 1 38070 21 gt matplot lhbyzone no error occurs here 但是如果我拿 lh 的头并尝试 它会
  • 使用 JSch 读取 SFTP 服务器上文件的文件扩展属性

    我想使用 com jcraft JSch 0 1 55 读取文件扩展属性 该文件位于 SFTP 服务器上 我知道那个班级SftpATTR其实有一个方法 public String getExtended 但就我而言 它返回 null 我在这