Apache NiFi 如何配置定时处理器通过通配符删除指定后缀文件
问题根因
通配符*是Linux Shell的内置功能,NiFi的ExecuteStreamCommand、ExecuteProcess处理器默认直接调用目标二进制程序,不会启动Shell环境,因此*不会被自动展开为匹配的文件列表,rm程序会把*.abc当作实际存在的文件名去查找,自然找不到对应文件。
可行解决方案
方案1:通过Shell调用rm命令(适合快速实现)
使用ExecuteProcess或ExecuteStreamCommand时按如下配置:
- Command参数填:
/bin/bash - Command Arguments按顺序添加两个参数:
- 第一个参数:
-c - 第二个参数:
rm -f /home/dir1/dir2/*.abc
- 第一个参数:
这个配置会启动bash执行后面的命令串,bash会自动完成通配符展开,再调用rm删除对应文件。
方案2:使用NiFi原生处理器组合(更稳定安全,推荐)
不需要调用外部命令,用NiFi自带的处理器实现匹配删除,规避通配符问题:
- 替换原有处理器为
ListFile+DeleteFile组合 - 配置
ListFile处理器:- Input Directory填:
/home/dir1/dir2 - File Filter填正则表达式:
.*\.abc$(匹配所有后缀为.abc的文件) - 原有的30秒执行定时器保留在这个处理器的Scheduling标签页
- Input Directory填:
- 将
ListFile的success关系连接到DeleteFile处理器,DeleteFile无需额外特殊配置,会自动删除ListFile匹配到的所有文件。
原有方案失效原因说明
- 直接给rm传带
*的路径时,rm不会处理通配符,只会查找文件名完全匹配*.abc的文件 - FetchFile处理器的File to Fetch字段仅支持单个具体文件路径,不支持通配符批量匹配
内容的提问来源于stack exchange,提问作者mikec
相关产品推荐
相关产品推荐

