Ansible:如何删除目录中的文件和文件夹?

下面的代码只会删除它在Web目录中获得的第一个文件。 我想删除Web目录中的所有文件和文件夹,并保留Web目录。 我怎样才能做到这一点?

- name: remove web dir contents file: path='/home/mydata/web/{{ item }}' state=absent with_fileglob: - /home/mydata/web/* 

注意:我已经使用命令和shell尝试了rm -rf,但是它们不起作用。 也许我错误地使用了它们。

任何帮助正确的方向将不胜感激。

我正在使用2.1.0.0

下面的代码将删除artifact_path的全部内容

 - name: Clean artifact path file: state: absent path: "{{ artifact_path }}/" 

注意:这也会删除目录。

使用shell模块:

 - shell: /bin/rm -rf /home/mydata/web/* 

如果您不关心创builddate,请使用最干净的解决scheme:

 - file: path=/home/mydata/web state=absent - file: path=/home/mydata/web state=directory 

尝试下面的命令,它应该工作

 - shell: ls -1 /some/dir register: contents - file: path=/some/dir/{{ item }} state=absent with_items: {{ contents.stdout_lines }} 

删除目录(基本上是https://stackoverflow.com/a/38201611/1695680的副本),Ansible在;rmtree下执行此操作。

 - name: remove files and directories file: state: "{{ item }}" path: "/srv/deleteme/" owner: 1000 # set your owner, group, and mode accordingly group: 1000 mode: '0777' with_items: - absent - directory 

如果您没有删除整个目录并重新创build它的好处,您可以扫描它的文件(和目录),并逐个删除它们。 这将需要一段时间。 你可能想要确保在你的ansible.cfg中有[ssh_connection]\npipelining = True

 - block: - name: 'collect files' find: paths: "/srv/deleteme/" hidden: True recurse: True # file_type: any # Added in ansible 2.3 register: collected_files - name: 'collect directories' find: paths: "/srv/deleteme/" hidden: True recurse: True file_type: directory register: collected_directories - name: remove collected files and directories file: path: "{{ item.path }}" state: absent with_items: > {{ collected_files.files + collected_directories.files }} 

使用文件glob也是可行的。 您发布的代码中有一些语法错误。 我已经修改和testing这应该工作。

 - name: remove web dir contents file: path: "{{ item }}" state: absent with_fileglob: - "/home/mydata/web/*" 

假设你总是在Linux下,试试看cmd。

 - name: Clean everything inside {{ item }} shell: test -d {{ item }} && find {{ item }} -path '{{ item }}/*' -prune -exec rm -rf {} \; with_items: [/home/mydata/web] 

这应该清除/home/mydata/web下隐藏的文件/文件夹

虽然Ansible仍在争论实施state = empty https://github.com/ansible/ansible-modules-core/issues/902

 my_folder: "/home/mydata/web/" empty_path: "/tmp/empty" - name: "Create empty folder for wiping." file: path: "{{ empty_path }}" state: directory - name: "Wipe clean {{ my_folder }} with empty folder hack." synchronize: mode: push #note the backslash here src: "{{ empty_path }}/" dest: "{{ nl_code_path }}" recursive: yes delete: yes delegate_to: "{{ inventory_hostname }}" 

注意,虽然同步你应该能够正确地同步你的文件(删除)。

这里是空文件夹的问题, https://github.com/ansible/ansible/issues/18910

现在,这个解决scheme为我工作。

创build一个空文件夹

 makedir /tmp/empry 

然后在完整的剧本中join以下几行

 - name: Empty remote directory synchronize: src: /tmp/empry/ dest: /home/mydata/web/ delete: yes recursive: yes 

下面为我​​工作,

 - name: Ansible delete html directory file: path: /var/www/html state: directory