2017-08-11 197 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