感谢关注,我在我的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)
,它可以正常工作。
答案 0 :(得分:1)
问题可能是您的子目录没有通过过滤器,因此不会被搜索。如the documentation中所述,您需要将子目录模式添加到过滤器...
...但是,通过提供FileListFilter,可以过滤树中的文件;树中的目录也可以这种方式过滤。 FileListFilter可以通过引用或filename-pattern或filename-regex属性提供。例如,
filename-regex="(subDir|.*1.txt)"
将检索远程目录和子目录subDir中以1.txt结尾的所有文件。如果过滤了子目录,则不会执行该子目录的其他遍历。
所以,如果你有,比如子foo1
,foo2
,foo3
等,你可以使用
filename-regex="(foo[0-9]|.*\.txt)"
正则表达式的第一部分传递子目录,第二部分匹配以.txt
结尾的文件(或目录)。
了解递归的工作原理非常重要。从顶层开始...
当然,您可以提供自定义过滤器以满足您的任何需要(例如,不要过滤目录)。