ansible find:获取目录的路径

ansible find:获取目录的路径

在查找中我得到了以下输出,如何仅过滤路径?

find:
  paths: /jv01
  recurse: yes
  file_type: directory
  patterns: 'agent_13.3.0.0.0'
register: oem
- debug:
  var: oem

"oem": {
        "changed": false,
        "examined": 24156,
        "failed": false,
        "files": [
            {
                "atime": 1545128921.5473044,
                "ctime": 1545120358.3347161,
                "dev": 64768,
                "gid": 1027,
                "inode": 67,
                "isblk": false,
                "ischr": false,
                "isdir": true,
                "isfifo": false,
                "isgid": false,
                "islnk": false,
                "isreg": false,
                "issock": false,
                "isuid": false,
                "mode": "0755",
                "mtime": 1545120358.3347161,
                "nlink": 28,
                "path": "/jv01/oracle/agent_13.3.0.0.0",
                "rgrp": true,
                "roth": true,
                "rusr": true,
                "size": 4096,
                "uid": 1027,
                "wgrp": false,
                "woth": false,
                "wusr": true,
                "xgrp": true,
                "xoth": true,
                "xusr": true
            }
        ],
        "matched": 1,
        "msg": ""
    }
}

答案1

您可以通过遍历列表并单独提取每条路径来获取路径。

您必须这样做,因为 find 返回每个文件的字典列表。毕竟,返回的字典可能不止一个。

- name: Show file paths
  debug:
    msg: "{{ item.path }}"
  with_items: "{{ oem.files }}"

答案2

尝试 Jinja2 过滤器

{{ oem.files | map(attribute='path') | list }}

请注意,这将创建一个列表。如果您不想要列表,您可以使用这个

{{ oem.files | map(attribute='path') | join('') }}

但如果找到更多文件,则输出将是所有找到的文件的路径一起。

答案3

我在尝试从 find 的结果中窥探 path 的内容时偶然发现了您的帖子。我想将我的发现分享给其他试图弄清楚这一点的初学者。

请记住,这不是一个优雅的解决方案,但它帮助我理解查找结果的数据结构:

- name: "find directory xyz"
  find:
    paths: "{{ search_path }}"
    recurse: yes
    file_type: directory
    patterns: "xyz"
  register: find_matches

- name: "print the path of our first result"
  debug:
    var: find_matches.files[0].path
  when: find_matches is defined

Find 的结果存储在字典列表的字典中。在实际情况下,您肯定希望迭代结果。

相关内容