我有一个文件列表。我想迭代文件列表,只提取新列表变量的路径。
这给了我文件列表:
- 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 }}"
迭代列表可能会给我重复的路径。使用' unique'过滤器可以解决。我相信有一个合适的jinja样式过滤器可以让我获得我追求的结果。谢谢你的帮助。