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