除此之外还有另一种方法是在root_dir
目录的目录上循环而不是递归:
- name: loop over directories
debug: var=item
with_filetree: "{{root_dir}}"
when: (item.path.split('/') | length == 1) and (item.state == 'directory')
因为这看起来很牵强,也许有更好的方法(不会深深地遍历目录)?
注意:我也尝试使用with_fileglob
和item.state = 'directory'
的组合,但没有成功。
编辑:
find
作为@techraf在评论中提出,或ls -l | grep '^d'
)也可以满足需要,但我更多地要求使用Ansible模块与shell
或command
不同。答案 0 :(得分:1)
使用带有参数的command: find
来限制搜索深度(afair,它们在GNU和BSD的find
版本中有所不同。)
或使用两个Ansible的原生find
任务,均使用recurse: false
:
第一个:file_type: directory
root_dir
第二个:在paths: "{{ item }}"
的第一个结果的循环中
由于第二个任务中存在循环,您最终会得到存储在层次结构中的结果,因此要访问展平结果,请使用以下模板(请参阅this answer):
{{ second_task.results | sum(attribute='files', start=[]) | map(attribute='path') | list }}
您可以添加第三个set_fact
- 任务,以简化后续任务中对变量的引用。