Đó 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
recurse
thà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 file
mô-đun. Đầu ra của nó hơi dài dòng, vì vậy loop_control.label
sẽ 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.