发表于 2017-09-13 23:28
楼主
今天群里有个朋友需要判断文件夹里是否存在“产品成交明细信息(20170911_205137).txt”这样文件名格式的文件。如果不存在,就一直等待,直到文件存在后才处理后续的步骤。
TASKCTL自带的filewatch虽然也支持变量适配文件名。但是必须完全匹配整个文件名才行。所以就不能匹配 产品成交明细信息(20170911_******).txt 这样的文件名了。
换个思路吧:
1、新建判断文件是否存在的shell脚本,让它支持模糊匹配文件名,脚本内容如下:
#!bin/sh # 文件名特征码 wdate=$1 for file in $HOME/myfile/* do if test -f $file then if [[ $file =~ $wdate ]] then echo '存在文件:'$file exit 0 fi fi done echo '不存在文件' exit 1
2、设计流程模块代码如下:
<serial> <name>MainModul_rootnode</name> <begin> <name>MainModul_beginjob</name> </begin> <sh> <name>checkfile_job</name> <progname>$HOME/myshell/checkfile.sh</progname> <para>$(filematch)</para> <maxnum>0</maxnum> <jobdesc>判断特征文件名是否存在</jobdesc> </sh> <exe> <name>MainModul_JobNode1</name> <progname>sleep</progname> <para>30</para> <jobdesc>存在才开始加载文件数据</jobdesc> </exe> <!-- 用户模块代码自定义区开始 --> <!-- 用户模块代码自定义区结束 --> <end> <name>MainModul_endjob</name> </end> </serial>
3、测试流程
设置变量filematch的值为20170913。这时运行到checkfile_job时。会因为找不到文件而报错。但是我们设置了maxnum=0(表示错误重试次数不限)。
所以它会一直等待找到可以匹配的文件,才成功往下运行。如下图:
这次的例子,巧妙的利用到TASKCTL的maxnum=0的特性。来变相实现filewatch的功能。我们会在今后的版本中,增强filewatch的功能,比如支持正则表达式匹配文件名。以适配更多的应用场景。
请登录后评论~