Abb*_*bas 137 delete-file ansible delete-directory
以下代码仅删除它在Web目录中获取的第一个文件.我想删除web目录中的所有文件和文件夹并保留web目录.我怎样才能做到这一点?
- name: remove web dir contents
file: path='/home/mydata/web/{{ item }}' state=absent
with_fileglob:
- /home/mydata/web/*
Run Code Online (Sandbox Code Playgroud)
注意:我尝试过rm -rf
使用命令和shell,但它们不起作用.也许我错误地使用它们.
任何正确方向的帮助将不胜感激.
我使用的是ansible 2.1.0.0
Moh*_*r P 130
下面的代码将删除artifact_path的全部内容
- name: Clean artifact path
file:
state: absent
path: "{{ artifact_path }}/"
Run Code Online (Sandbox Code Playgroud)
注意:这也会删除目录.
hel*_*loV 66
使用shell模块:
- shell: /bin/rm -rf /home/mydata/web/*
Run Code Online (Sandbox Code Playgroud)
如果您不关心创建日期,最干净的解决方案:
- file: path=/home/mydata/web state=absent
- file: path=/home/mydata/web state=directory
Run Code Online (Sandbox Code Playgroud)
Tho*_*ner 49
删除目录(基本上是/sf/answers/2674112801/的副本),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
Run Code Online (Sandbox Code Playgroud)
如果您没有删除整个目录并重新创建它的奢侈,您可以扫描它以查找文件,(和目录),并逐个删除它们.这需要一段时间.您可能希望确保[ssh_connection]\npipelining = True
在ansible.cfg中有.
- 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
}}
Run Code Online (Sandbox Code Playgroud)
Cri*_*ris 20
我真的不喜欢rm解决方案,同时ansible给你关于使用rm的警告.所以这里是如何做到这一点,而不需要rm和没有ansible警告.
- hosts: all
tasks:
- name: Ansible delete file glob
find:
paths: /etc/Ansible
patterns: "*.txt"
register: files_to_delete
- name: Ansible remove file glob
file:
path: "{{ item.path }}"
state: absent
with_items: "{{ files_to_delete.files }}"
Run Code Online (Sandbox Code Playgroud)
来源:http://www.mydailytutorials.com/ansible-delete-multiple-files-directories-ansible/
小智 18
尝试下面的命令,它应该工作
- shell: ls -1 /some/dir
register: contents
- file: path=/some/dir/{{ item }} state=absent
with_items: {{ contents.stdout_lines }}
Run Code Online (Sandbox Code Playgroud)
这就是我想出的:
- 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 }}"
Run Code Online (Sandbox Code Playgroud)
首先,我们使用find
, 设置获取目录列表
file_type
to any
,所以我们不会错过嵌套的目录和链接hidden
to yes
,所以我们不会跳过隐藏文件recurse
为yes
,因为它不仅没有必要,而且可能会增加执行时间。然后,我们使用file
模块浏览该列表。它的输出有点冗长,因此loop_control.label
将帮助我们限制输出(在此处找到此建议)。
但是我发现以前的解决方案有点慢,因为它遍历内容,所以我选择了:
- 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 }}"
Run Code Online (Sandbox Code Playgroud)
stat
这对我来说已经足够了,但attributes
如果你愿意,你也可以添加。
使用文件glob也可以.您发布的代码中存在一些语法错误.我已经修改并测试了这应该工作.
- name: remove web dir contents
file:
path: "{{ item }}"
state: absent
with_fileglob:
- "/home/mydata/web/*"
Run Code Online (Sandbox Code Playgroud)
小智 6
跟进此处最受好评的答案(由于“编辑队列已满”,我无法编辑该答案):
- name: Delete content & directory
file:
state: absent
path: /home/mydata/web/
- name: Re-create the directory
file:
state: directory
path: /home/mydata/web/
Run Code Online (Sandbox Code Playgroud)
虽然 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 }}"
Run Code Online (Sandbox Code Playgroud)
但请注意,通过同步,您应该能够正确同步文件(通过删除)。
从所有评论和建议中创建了一个全面的改造和故障安全实施:
# collect stats about the dir
- name: check directory exists
stat:
path: '{{ directory_path }}'
register: dir_to_delete
# delete directory if condition is true
- name: purge {{directory_path}}
file:
state: absent
path: '{{ directory_path }}'
when: dir_to_delete.stat.exists and dir_to_delete.stat.isdir
# create directory if deleted (or if it didn't exist at all)
- name: create directory again
file:
state: directory
path: '{{ directory_path }}'
when: dir_to_delete is defined or dir_to_delete.stat.exist == False
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
259288 次 |
最近记录: |