如何使用Ansible find模块实现指定深度查找匹配名称的目录
问题解决办法
错误根因
- 参数误用:你当前使用的
depth参数是Ansible find模块定义的最小搜索深度,对应Linux find命令-maxdepth 2的参数应为max_depth - 匹配逻辑错误:默认配置下find模块的多个patterns是「同时满足」的AND逻辑,你需要的是匹配任意一个pattern的OR逻辑
正确配置示例
- name: find fields find: paths: "/home/user/data" max_depth: 2 # 对应原命令的-maxdepth 2,限制最大搜索深度为2层 file_type: directory patterns: '^(mul|sqr)$' # 用正则表达式实现OR匹配,匹配mul或者sqr的目录名 use_regex: yes # 开启正则匹配模式 register: fields - name: debug1 debug: msg: " myitem: {{ item }}" loop: "{{ fields.files | map(attribute='path') }}"
补充说明
如果你不想开启正则匹配,也可以调整参数用通配符模式实现,但正则写法更贴合你原shell命令的匹配习惯,执行效率和遍历子目录的方案相比提升非常明显,适合子目录多的场景。
内容的提问来源于stack exchange,提问作者Joel
相关产品推荐
相关产品推荐

