使用Pentaho Kettle通过SFTP获取指定格式文件的问题
解决方案
核心问题分析
你遇到的问题大概率是因为所使用的SFTP工具的「通配符」输入框并不支持标准正则表达式,而是默认采用glob文件匹配模式。在glob中,\d和{8}不会被解析为“匹配数字”和“重复8次”的正则语法,而是被当作普通字符处理,导致你的表达式.*Bede7d_\d{8}.*实际等价于*Bede7d_*,自然会匹配所有包含Bede7d_的文件。
针对性解决方法
方法1:使用glob精确匹配(推荐,适配绝大多数SFTP工具)
直接结合当日日期构造glob匹配规则:
- 若当日日期为
20230823,使用通配符:*Bede7d_20230823*.csv - 如果是自动化场景需要动态获取当日日期,查找工具是否支持日期变量(比如多数低代码/自动化工具会提供类似
{{YYYYMMDD}}或%DATE:YYYYMMDD%的变量),替换为:*Bede7d_{{当日日期变量}}*.csv
方法2:确认工具支持正则后调整表达式
如果工具明确支持标准正则表达式,调整表达式以精准匹配:
- 基础精准版:
.*Bede7d_\d{8}.*\.csv(限定匹配.csv后缀的文件,避免无关文件) - 更严格版:
.*Bede7d_\d{8}\d{12}_.*\.csv(匹配Bede7d_后紧跟8位日期+12位时间的文件,完全贴合你的文件名格式)
额外验证步骤
- 先在工具中测试简单的glob规则(比如
*Bede7d_20230823*.csv),确认是否能筛选出目标文件。 - 若工具支持正则,先测试
.*Bede7d_20230823.*,确认能匹配当日文件后,再替换为\d{8}的动态写法。
内容的提问来源于stack exchange,提问作者Shreya Mishra
相关产品推荐
相关产品推荐

