JSch ChannelSftp.ls - 在 java 中传递匹配模式
JSch ChannelSftp.ls - pass match patterns in java
我在一个 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 将路径作为参数: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
}
}
如果您不需要检查日期是否由数字格式化,您可以使用以下模式和 ChannelSftp.ls
pattern = xyz_????????.csv.gz
但这也将匹配如下内容:xyz_2014_aaa.csv.gz
ChannelSftp.ls
在其 path
参数中接受路径和模式:
Parameters:
path
- a pattern relative to the current remote directory. The pattern can contain glob pattern wildcards (*
or ?
) in the last component (i.e. after the last /
).
您应该在参数中包含目录路径;并修改模式以仅匹配您需要的文件。您使用的模式确实匹配您列表中的任何文件,而不仅仅是您想要的文件。
您可以使用xyz_????????.csv.gz
明确要求可变部分有8个字符。
path_and_pattern = "/path/xyz_????????.csv.gz";
files = channel.ls(path_and_pattern);
我在一个 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 将路径作为参数: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
}
}
如果您不需要检查日期是否由数字格式化,您可以使用以下模式和 ChannelSftp.ls
pattern = xyz_????????.csv.gz
但这也将匹配如下内容:xyz_2014_aaa.csv.gz
ChannelSftp.ls
在其 path
参数中接受路径和模式:
Parameters:
path
- a pattern relative to the current remote directory. The pattern can contain glob pattern wildcards (*
or?
) in the last component (i.e. after the last/
).
您应该在参数中包含目录路径;并修改模式以仅匹配您需要的文件。您使用的模式确实匹配您列表中的任何文件,而不仅仅是您想要的文件。
您可以使用xyz_????????.csv.gz
明确要求可变部分有8个字符。
path_and_pattern = "/path/xyz_????????.csv.gz";
files = channel.ls(path_and_pattern);