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

Ado*_*ith 4 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
Run Code Online (Sandbox Code Playgroud)

通过我的 java 程序,我只想获取格式为 xyz_YYYYMMDD.csv.gz 的文件列表,我的匹配模式应该是什么以传递 ChannelSftp.ls 命令。

我路过

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

ChannelSftp.ls(pattern);
Run Code Online (Sandbox Code Playgroud)

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

use*_*883 6

ChannelSftp.ls 将路径作为参数:http : //epaul.github.io/jsch-documentation/javadoc/com/jcraft/jsch/ChannelSftp.html#ls(java.lang.String)

路径可以包含 glob 模式通配符(* 或 ?),但这样您就无法检查日期是否包含数字。

所以只需列出路径并在之后应用正则表达式

        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
            }

        }
Run Code Online (Sandbox Code Playgroud)

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

pattern =  xyz_????????.csv.gz
Run Code Online (Sandbox Code Playgroud)

但这也将匹配以下内容:xyz_2014_aaa.csv.gz