在查找中我得到了以下输出,如何仅过滤路径?
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 的结果存储在字典列表的字典中。在实际情况下,您肯定希望迭代结果。