int-ftp中的file-pattern选项:outboundgateway不能在递归模式下工作?

时间:2015-04-29 12:30:04

标签: spring ftp spring-integration

感谢关注,我在我的spring集成项目中使用 ls 命令定义了int-ftp:outbound-gateway适配器,我想过滤递归 .op扩展文件在我的ftp目录中,我将file-pattern设置为*.op坚果不起作用,我的代码是:

 <int-ftp:outbound-gateway id="gatewayLS"
                              session-factory="ftpSessionFactory"
                              request-channel="inbound"
                              command="ls"
                              filter="ftpFilter"
                              filename-pattern="*.op"
                              remote-directory=""
                              command-options="-R"
                              expression="payload"
                              reply-channel="toSplitter"/>

更新 感谢帮助@Gary,我使用了filename-regex选项而不是filename-pattern([foo]|.*\.op)(例如)并且它正常工作。
对于过滤多个子目录,我们可以使用正则表达式([a-z]*|[a-z]*|.*\.op),它可以正常工作。

1 个答案:

答案 0 :(得分:1)

问题可能是您的子目录没有通过过滤器,因此不会被搜索。如the documentation中所述,您需要将子目录模式添加到过滤器...

  

...但是,通过提供FileListFilter,可以过滤树中的文件;树中的目录也可以这种方式过滤。 FileListFilter可以通过引用或filename-pattern或filename-regex属性提供。例如,filename-regex="(subDir|.*1.txt)"将检索远程目录和子目录subDir中以1.txt结尾的所有文件。如果过滤了子目录,则不会执行该子目录的其他遍历。

所以,如果你有,比如子foo1foo2foo3等,你可以使用

filename-regex="(foo[0-9]|.*\.txt)"

正则表达式的第一部分传递子目录,第二部分匹配以.txt结尾的文件(或目录)。

了解递归的工作原理非常重要。从顶层开始...

  • list files / dirs
  • 过滤文件/目录
  • 迭代,如果是目录,则递归

当然,您可以提供自定义过滤器以满足您的任何需要(例如,不要过滤目录)。