删除文件夹中比x天旧的文件

4
我想使用ansible删除旧文件。我有一个数据日志文件夹,在这个文件夹里面我有多个目录:
/data/log/folder1/
/data/log/folder2/
....

我尝试使用这个Ansible Playbook:

---
- hosts: all
  tasks:
    - name: find all files that are older than 10 days
      find:
        paths: /data/log/*/
        age: 10d
        recursive: yes
      register: filesOlderThan10
    - name: remove older than 10
      file:
        path: "{{ item.path }}" 
        state: absent
      with_items: "{{ (filesOlderThan10.files }}"

当我启动playbook时,没有任何内容被删除,我不确定是否可以使用这个语法/data/log/*/
因此,我正在寻找改进此代码的建议。


1
根据模块文档,paths是“要搜索的目录路径列表。所有路径必须是完全限定的。”也许您使用通配符的值不被接受。您在filesOlderThan10列表中获得任何项目吗? - ilias-sp
2个回答

10

目前我在playbook中发现了三到四个错误

  1. 如果您需要删除没有权限的文件,请使用“become”或确保其在config/inventory中设置。
  2. 路径应该是全路径,路径中不应该包含通配符。我认为它应该是paths: /data/log。
  3. 'recursive'不是find模块的正确选项,应该使用'recurse'。
  4. 最后一行有一个不必要的'('。

以下代码应该可以正常工作

---
- hosts: all
  tasks:
    - name: find all files that are older than 10 days
      find:
        paths: /data/log
        age: 10d
        recurse: yes
      register: filesOlderThan10
    - name: remove older than 10
      file:
        path: "{{ item.path }}" 
        state: absent
      with_items: "{{ filesOlderThan10.files }}"

4

我之前使用的是带有 find 的cronjob,现在决定转向AWX。在这里和其他文章中检查后,我想到了以下解决方案。目前已经测试并且可以正常工作。

第一个任务将所有早于3天的文件注册为matched_files_dirs

第二个任务会将它们删除。虽然能完成任务,但比在Linux上运行cron慢。

---
- name: Cleanup
  hosts: linux
  gather_facts: false
  tasks:
  - name: Collect files
    shell: find /opt/buildagent/system*/target_directory -type f -mtime +3
    register: matched_files_dirs
    
  - name: Remove files
    become_user: root
    file: 
        path: "{{ item }}" 
        state: absent
    with_items: "{{ matched_files_dirs.stdout_lines }}"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接