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

时间:2016-09-15 05:57:35

标签: find ansible

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

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

不幸的是,我没有看到任何缩小目标结果列表的方法......

  1. find模块似乎不支持排序......可以以任何方式完成吗?
  2. Ansible是否提供了操作JSON列表的任何方法......仅在列表中保留n个元素并删除所有其他元素?
  3. 是否有人成功将find模块用于类似用途?<​​/ p>

1 个答案:

答案 0 :(得分:1)

您可以使用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个属性并形成一个列表。