而不是使用Ansible shell或命令模块,我试图使用find模块删除旧的备份目录,只保留最新的n
备份。目前,我使用以下代码获取所有备份目录的列表(以便在第二步中删除不需要的目录):
- find:
paths: "/opt/"
patterns: "backup_*"
file_type: "directory"
不幸的是,我看不出有任何方法可以缩小结果目录列表…
- find模块似乎不支持排序…有什么办法可以做到吗? 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
属性并形成列表