使用 JSch LS 方法列出带问号的目录

Listing directory with a question mark using JSch LS method

我编写了一个使用 JSch ChannelSftp.ls() 递归列出子目录及其文件的方法。在将带有 ? 的目录添加到 SFTP 服务器之前,它一直有效。由于 ? 是一个 glob 模式,因此 JSch 无法按我的预期工作。我花了一些时间研究,但似乎根本无法获取带有问号(或 * 出于相同原因)的目录的信息。 Here's a post sharing the exact same problem as I have.

有没有人遇到同样的问题并解决了?现在,我所能做的就是替换目录名。

确实,当您指定最后一个组件包含 *? 的路径时,例如:

/actual/path/with/question?mark

... JSch 认为最后一个组件是文件的 filter/pattern。它去除最后一个组件,列出路径 /actual/path/with,然后仅将列出的文件过滤为匹配 question?mark 的文件(通常只返回一个条目,用于子文件夹本身,而不是子文件夹内容)。


要解决此问题,只需将另一个模式 (*) 添加到路径中,例如:

/actual/path/with/question?mark/*

它使 JSch 列出路径 /actual/path/with/question?mark,然后将列出的文件过滤为匹配 * 的文件(这将是所有文件)。