JSch ChannelSftp.ls-java中的传递匹配模式

JSch ChannelSftp.ls-java中的传递匹配模式,java,regex,sftp,jsch,Java,Regex,Sftp,Jsch,我在sftp位置有多个文件,如 xyz_20140101.csv.gz xyz_2014_01_01.csv.gz xyz_20140202.csv.gz xyz_2014_02_02.csv.gz 通过我的java程序,我只想获得格式为xyz_YYYYMMDD.csv.gz的文件列表,在ChannelSftp.ls命令中传递的匹配模式应该是什么 我路过 pattern = xyz_*csv.gz , but it gives me all the files . ChannelSftp.l

我在sftp位置有多个文件,如

xyz_20140101.csv.gz
xyz_2014_01_01.csv.gz
xyz_20140202.csv.gz
xyz_2014_02_02.csv.gz
通过我的java程序,我只想获得格式为xyz_YYYYMMDD.csv.gz的文件列表,在ChannelSftp.ls命令中传递的匹配模式应该是什么

我路过

pattern = xyz_*csv.gz , but it gives me all the files .

ChannelSftp.ls(pattern);

在ls命令中传递的模式应该是什么?

ChannelSftp.ls将路径作为参数:

路径可以包含全局模式通配符(*或?),但使用该通配符,您无法检查日期是否包含数字

因此,只需列出路径并在之后应用正则表达式即可

        Vector ls = channelSftp.ls(path);
        Pattern pattern = Pattern.compile("xyz_[0-9]{8}.csv.gz");
        for (Object entry : ls) {
            ChannelSftp.LsEntry e = (ChannelSftp.LsEntry) entry;
            //match regex on e.getFilename()
            Matcher m = pattern.matcher(e.getFilename());
            if (m.matches()) {
                //TODO you code
            }

        }
如果您不需要检查日期是否由数字格式化,您可以使用以下模式和ChannelSftp.ls

pattern =  xyz_????????.csv.gz
但这也将匹配如下内容:xyz_2014_aaa.csv.gz

路径
参数中的接受路径和模式:

参数:

路径
-相对于当前远程目录的模式。模式可以在最后一个组件中(即在最后一个
/
之后)包含全局模式通配符(
*

您应该在参数中包含目录的路径;并修改模式以仅匹配所需的文件。您使用的模式确实匹配列表中的任何文件,而不仅仅是您想要的文件

您可以使用
xyz掼.csv.gz
明确要求变量部分包含8个字符

path_and_pattern = "/path/xyz_????????.csv.gz";

files = channel.ls(path_and_pattern);

你能通过一个示例/示例代码告诉我吗?我不能在ls命令中以任何方式传递正则表达式吗?我在api中找不到任何接受正则表达式的方法;但是我看不出有什么不方便的地方,因为你没有下载这些文件,只是取了名称。谢谢你回答了我的问题,我也有同样的想法,但请告诉我如何为这些文件创建正则表达式。@AdonSmith edited;基本上,您将允许0-9-8倍的数字,也适用于以prinklr_uu和8位数开头的文件;不同的数字书写方式;使用任何你喜欢的;如果它回答了您的问题,请接受