我有一个Ansible命令,它返回一个目录列表:
- local_action: command find {{ role_path }}/files -type f
register: result
例如,它返回了两条路径:path/files/a/1.zip
和path/files/a/2.zip
。我需要剪切字符串路径/文件的开头,离开/a/1.zip
和/a/2.zip
并注册结果以删除这些文件。我尝试了regex_replace
和shell sed
。但这没效果。有可能吗?
- command: "echo {{item}} | sed s/'{{ role_path }}/files'/''"
with_items: "{{result.stdout_lines}}"
register: script_results
- msg: {{ item | regex_replace('/path/files','\\1') }}
with_items: "{{result.stdout_lines}}"
答案 0 :(得分:0)
如评论中所述:您不应该首先使用命令。您可以将find
任务委派给map
,它应该在您执行剧本的机器上执行。
您可以使用the relpath
filter删除路径的开头,并使用attribute
过滤器和- find:
path: "{{ role_path }}"
recurse: yes
register: result
delegate_to: 127.0.0.1
- debug:
msg: "{{ item | relpath(role_path) }}"
with_items: "{{ result.files | map(attribute='path')}}"
方便地提取路径:
ok: [127.0.0.1] => (item=/path/to/role/dir/file_1) => {
"item": "/path/to/role/dir/file_1",
"msg": "dir/file_1"
}
您将获得的输出将类似于以下示例。价值观不是以斜杠开头的,但我认为您可以轻松解决这个问题。
time.sleep(0.005)