Spring 如何在int ftp:出站网关中使用filename regex选项?
我在spring集成项目中使用Spring 如何在int ftp:出站网关中使用filename regex选项?,spring,ftp,spring-integration,Spring,Ftp,Spring Integration,我在spring集成项目中使用ls命令和递归模式定义了ftp出站适配器。我想筛选并获取指定子目录中的文件。服务器上的目录结构为: root ----------a\ ---------------in\ ---------------------a.op ----------b\ ---------------in\ ---------------------b.op 我想获取a.op和b.op文件。我将filename regex选项设置为([a-z]| i
ls
命令和递归模式定义了ftp出站适配器。我想筛选并获取指定子目录中的文件
。服务器上的目录结构为:
root
----------a\
---------------in\
---------------------a.op
----------b\
---------------in\
---------------------b.op
我想获取a.op
和b.op
文件。我将filename regex
选项设置为([a-z]| in |.*.\.op)
,但它没有正常工作,只过滤了第一级目录。我的适配器代码是:
<int:inbound-channel-adapter expression="'/'" channel="inbound">
<int:poller fixed-delay="20000"/>
</int:inbound-channel-adapter>
<int-ftp:outbound-gateway id="gatewayLS"
session-factory="ftpSessionFactory"
request-channel="inbound"
command="ls"
filename-regex="([a-z]|in|.*\.op)"
command-options="-R"
expression="payload"
reply-channel="toSplitter"/>
如何解决此问题?filename regex=“([a-z]|in |.*.op)”
正则表达式在递归过程中应用
考虑到您的树结构:
第一个ls
,返回[a,b]
这些由第一个可选的regex元素[a-z]传递
第二个和第四个ls
返回由第二部分传递的in
第三个ls
返回上一部分传递的a.op
第五个ls
返回由最后一个部分传递的b.op
。filename regex=“([a-z]|in |.*.op)”
正则表达式在递归过程中应用
考虑到您的树结构:
第一个ls
,返回[a,b]
这些由第一个可选的regex元素[a-z]传递
第二个和第四个ls
返回由第二部分传递的in
第三个ls
返回上一部分传递的a.op
第五个
ls
返回上一个部分传递的b.op
。尝试使用\b([a-z]\\in\\.*.\.\.\.op)\b
regex。感谢您的回复@stribizev,但工作不正常:(这个(in.\.*.op)
?使用(.*.\.op^.[^.]+$)作为模式返回什么?让我们试试使用.b([a-z]\\在\\.\\.op中)\b
regex.感谢回复@Stribizev,但没有正确工作:(这个(在\.\.*.op中)
?使用(.\.op^[^.]+$)返回什么
作为模式?让我们来。感谢回复@Gary Russell,如果文件存在于目录a
中,并且扩展名为,则只有第一级工作。op
返回结果。正则表达式应用于每个递归,所以它应该工作;我建议您使用调试器。我使用ls
命令,命令中支持的文件名正则表达式选项?the文件。在每个目录的中包含在结果中,我希望文件的扩展名仅在中的中包含在结果中。这是正确的@Gary,但是当文件存在于a
目录中时,例如:a/test.op
为我包含在结果中。感谢回复@Gary Russell,仅第一级已工作,如果文件存在于目录a
中且扩展名为。op
返回结果。正则表达式应用于每个递归,因此它应该可以工作;我建议您使用调试器。我使用ls
命令,命令中支持的文件名正则表达式选项?在每个目录中,文件名为。在中,我希望在结果中包含文件使用.in
扩展名仅在in
目录中包含在结果中。这是对的@Gary,但当文件存在于a
目录中时,例如:a/test.op
为我包含在结果中。