Ansible 'find' 命令 - 仅打印文件名

Ansible 'find' command - print only filenames

我正在尝试使用 Ansible find 命令删除具有给定模式的文件。在执行删除部分之前,我想列出将要删除的文件。我只想列出包括路径在内的文件名。默认调试打印很多信息

- name: Ansible delete old files from pathslist
  find:
    paths: "{{ pathslist }}"
    patterns:
    - "authlog.*"
    - "server.log.*"
  register: var_log_files_to_delete

- name : get the complete path
  set_fact:
    files_found_path: "{{ var_log_files_to_delete.files }}"

- debug:
    var: files_found_path

输出如下

{
        "atime": 1607759761.7751443,
        "ctime": 1615192802.0948966,
        "dev": 66308,
        "gid": 0,
        "gr_name": "root",
        "inode": 158570,
        "isblk": false,
        "ischr": false,
        "isdir": false,
        "isfifo": false,
        "isgid": false,
        "islnk": false,
        "isreg": true,
        "issock": false,
        "isuid": false,
        "mode": "0640",
        "mtime": 1607675101.0750349,
        "nlink": 1,
        "path": "/var/log/authlog.87",
        "pw_name": "root",
        "rgrp": true,
        "roth": false,
        "rusr": true,
        "size": 335501,
        "uid": 0,
        "wgrp": false,
        "woth": false,
        "wusr": true,
        "xgrp": false,
        "xoth": false,
        "xusr": false
}

我尝试了 files_found_path: "{{ var_log_files_to_delete.files['path'] }}" 但它产生了一个错误。

如何只打印路径?

谢谢

Jinja2 过滤器 map 作为参数 attribute 将 dict 列表转换为每个元素的特定属性列表 (https://jinja.palletsprojects.com/en/2.11.x/templates/#map):

- name : get the complete path
  set_fact:
    files_found_path: "{{ var_log_files_to_delete.files | map(attribute='path') | list }}"

对于更复杂的数据提取,有 json_query 过滤器 (https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#selecting-json-data-json-queries)