Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何在int ftp:出站网关中使用filename regex选项?_Spring_Ftp_Spring Integration - Fatal编程技术网

Spring 如何在int ftp:出站网关中使用filename regex选项?

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

我在spring集成项目中使用
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
为我包含在结果中。