Đó là những gì tôi nghĩ ra:
- name: Get directory listing
find:
path: "{{ directory }}"
file_type: any
hidden: yes
register: directory_content_result
- name: Remove directory content
file:
path: "{{ item.path }}"
state: absent
with_items: "{{ directory_content_result.files }}"
loop_control:
label: "{{ item.path }}"
Đầu tiên, chúng tôi sẽ nhận được danh sách thư mục với find, cài đặt
file_typeđể any, vì vậy chúng tôi sẽ không bỏ lỡ các thư mục và liên kết lồng nhau
hiddenđể yes, vì vậy chúng tôi không bỏ qua các tập tin ẩn
- Ngoài ra, không được đặt
recursethành yes, vì nó không chỉ không cần thiết mà còn có thể tăng thời gian thực hiện.
Sau đó, chúng tôi đi qua danh sách đó với filemô-đun. Đầu ra của nó hơi dài dòng, vì vậy loop_control.labelsẽ giúp chúng tôi hạn chế đầu ra (tìm thấy lời khuyên này ở đây ).
Nhưng tôi thấy giải pháp trước đây hơi chậm, vì nó lặp đi lặp lại qua nội dung, vì vậy tôi đã đi với:
- name: Get directory stats
stat:
path: "{{ directory }}"
register: directory_stat
- name: Delete directory
file:
path: "{{ directory }}"
state: absent
- name: Create directory
file:
path: "{{ directory }}"
state: directory
owner: "{{ directory_stat.stat.pw_name }}"
group: "{{ directory_stat.stat.gr_name }}"
mode: "{{ directory_stat.stat.mode }}"
- có được thuộc tính thư mục với
stat
- xóa thư mục
- tạo lại thư mục với các thuộc tính tương tự.
Điều đó là đủ cho tôi, nhưng bạn cũng có thể thêm attributes, nếu bạn muốn.