删除所有旧文件,但使用 ansible-playbook 保留最新的 4 个文件

エック*_*エック 2 linux shell ansible

我想删除所有旧文件,并保留最新的 4 个文件。输出不是我所期望的。即使我在文件模块上使用不存在,但它不会删除文件。

我的文件在这里

# ls -l /home/tomcat/backup
total 0
-rw-r--r-- 1 root root 0 Mar  3 14:21 1
-rw-r--r-- 1 root root 0 Mar  3 14:21 2
-rw-r--r-- 1 root root 0 Mar  3 14:21 3
-rw-r--r-- 1 root root 0 Mar  3 14:21 4
-rw-r--r-- 1 root root 0 Mar  3 14:21 5
-rw-r--r-- 1 root root 0 Mar  3 14:21 6
-rw-r--r-- 1 root root 0 Mar  3 14:21 as
-rw-r--r-- 1 root root 0 Mar  3 14:21 asd
-rw-r--r-- 1 root root 0 Mar  3 14:21 df
-rw-r--r-- 1 root root 0 Mar  3 14:21 fas
-rw-r--r-- 1 root root 0 Mar  3 14:21 y6
Run Code Online (Sandbox Code Playgroud)

ansible.yml

- name: Prerequsite Deployement | Get first 4 files
  shell: "ls -t {{ item.path }}/{{ item.filename }} | tail -n +4"
  with_items:
    - { path: /home/tomcat/backup, filename: "*" }
  register: files_matched
  tags: prerequsite_deployment

- debug:
    msg: "{{item.stdout_lines}}"
  with_items: "{{files_matched.results}}"
  tags: prerequsite_deployment

- name: Prerequsite Deployement | Clean up path
  file:
    path: "{{item.stdout_lines}}"
    state: absent
  with_items:
    - "{{files_matched.results}}"
  tags: prerequsite_deployment
Run Code Online (Sandbox Code Playgroud)

结果输出

# ls -l /home/tomcat/backup
total 0
-rw-r--r-- 1 root root 0 Mar  3 14:21 1
-rw-r--r-- 1 root root 0 Mar  3 14:21 2
-rw-r--r-- 1 root root 0 Mar  3 14:21 3
-rw-r--r-- 1 root root 0 Mar  3 14:21 4
-rw-r--r-- 1 root root 0 Mar  3 14:21 5
-rw-r--r-- 1 root root 0 Mar  3 14:21 6
-rw-r--r-- 1 root root 0 Mar  3 14:21 as
-rw-r--r-- 1 root root 0 Mar  3 14:21 asd
-rw-r--r-- 1 root root 0 Mar  3 14:21 df
-rw-r--r-- 1 root root 0 Mar  3 14:21 fas
-rw-r--r-- 1 root root 0 Mar  3 14:21 y6
Run Code Online (Sandbox Code Playgroud)

我的预期结果输出

# ls -l /home/tomcat/backup
total 0
-rw-r--r-- 1 root root 0 Mar  3 14:21 1
-rw-r--r-- 1 root root 0 Mar  3 14:21 2
-rw-r--r-- 1 root root 0 Mar  3 14:21 3
-rw-r--r-- 1 root root 0 Mar  3 14:21 4
Run Code Online (Sandbox Code Playgroud)

Vla*_*tka 5

mtime注册变量中列出的字典属性result.files可用于对文件进行排序。例如

  - find:
      paths: dir1
      recurse: true
    register: result

  - set_fact:
      my_files: "{{ result.files|
                    sort(attribute='mtime')|
                    map(attribute='path')|
                    list }}"
Run Code Online (Sandbox Code Playgroud)

(可选)列出文件,但最后(最新)4 个文件

  - debug:
      var: my_files[0:-4]
Run Code Online (Sandbox Code Playgroud)

并删除文件(如果这是您想要的)

  - file:
      state: absent
      path: "{{ item }}"
    loop: "{{ my_files[0:-4] }}"
Run Code Online (Sandbox Code Playgroud)