int-ftp:outboundgateway 中的文件模式选项在递归模式下不起作用?

file-pattern option in int-ftp:outboundgateway not work in recursive mode?

感谢关注,我在 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) 并且它可以正常工作。

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

... However, files in the tree can be filtered, by providing a FileListFilter; directories in the tree can also be filtered this way. A FileListFilter can be provided by reference or by filename-pattern or filename-regex attributes. For example, filename-regex="(subDir|.*1.txt)" will retrieve all files ending with 1.txt in the remote directory and the subdirectory subDir. If a subdirectory is filtered, no additional traversal of that subdirectory is performed.

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

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

正则表达式的第一部分传递子目录,第二部分匹配以 .txt.

结尾的文件(或目录)

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

  • 列表files/dirs
  • 过滤器files/dirs
  • 迭代,如果是目录,递归

当然,您可以提供自定义过滤器以按您希望的方式工作(例如,不过滤目录)。