如何缩小结果的Ansible查找模块



而不是使用Ansible shell或命令模块,我试图使用find模块删除旧的备份目录,只保留最新的n备份。目前,我使用以下代码获取所有备份目录的列表(以便在第二步中删除不需要的目录):

- find:
    paths: "/opt/"
    patterns: "backup_*"
    file_type: "directory"

不幸的是,我看不出有任何方法可以缩小结果目录列表…

  1. find模块似乎不支持排序…有什么办法可以做到吗?
  2. Ansible提供任何方法来操作JSON列表吗?在列表中只保留n元素并删除所有其他元素?

是否有人成功地将find模块用于类似目的?

可以使用sort过滤器进行排序

您可以使用[:N]语法对列表的前N个元素执行任务。

- find:
    path: "/tmp/"
    pattern: "file*"
  register: my_files
- debug: msg="{{(my_files.files | sort(attribute='ctime'))[:-3] | map(attribute='path') | list }}"

ctime排序文件,取除最后三个元素外的所有元素,仅取path属性并形成列表

最新更新