2017-08-11 164 views
4

我有一个文件列表。我想遍历只提取新列表变量路径的文件列表。Ansible修改列表元素

这给了我,我的文件列表:

- name: sweep directory /foo/bar recursivly 
find: 
    paths: /foo/bar 
    recurse: yes 
    patterns: "*" 
    hidden: True 
register: sweep_result 

- name: build file list 
set_fact: 
all_list: "{{ sweep_result.files | map(attribute='path') | list }}" 

- debug: var=all_list 

输出:

TASK [debug] ************************************************* 
ok: [host] => { 
    "all_list": [ 
     "/foo/bar/.hiddenfile", 
     "/foo/bar/file1", 
     "/foo/bar/folder/file1", 
     "/foo/bar/folder/file2.ext", 
    ] 
} 

这是我想要的一个例子:

"paths": [ 
     "/foo/bar/", 
     "/foo/bar/folder/", 
    ] 

我可以看到,循环访问像这样的all_list在每个元素上工作,剥离文件和扩展名,只留下一条路径。我不知道如何做类似的事情,在这个过程中建立一个新的列表变量。

- debug: var=item[:item.rfind('/')] 
    with_items: 
    - "{{ all_list }}" 

对列表进行迭代可能会给我重复的路径。使用'独特'过滤器可以解决这个问题。我确信有一个适当的忍者风格过滤器可以让我获得我之后的结果。谢谢你的帮助。

回答

2

如果我的理解正确,你只需要一个所有目录列表,而不是文件。如果是这种情况,则看起来像ansible的file_type参数可以设置为directory

http://docs.ansible.com/ansible/latest/find_module.html

+0

完美。它有助于阅读文档!谢谢RussStarr和MrName。 –

4

也许使用file_type: directory查找模块中是否行得通呢?

- name: sweep directory /tmp recursivly 
     find: 
     paths: /tmp 
     recurse: yes 
     patterns: "*" 
     hidden: True 
     file_type: directory 
     register: sweep_result