如何在Ansible Playbook中捕获文件名并在控制台显示?
你原写法的问题在于:copy模块注册的变量是模块的完整执行结果,包含执行状态、源路径、目标路径等全量信息,直接打印整个变量不会输出纯文件名,需要配合Jinja2内置的basename过滤器处理路径字段才能拿到你要的文件名。
方案1:提前定义源路径变量直接提取(推荐,逻辑更清晰)
--- - name: 文件名捕获示例 hosts: 你的目标主机组 gather_facts: no vars: # 提前定义源文件路径,后续可复用 source_file_path: /tmp/example.tar.gz tasks: - name: 复制文件到目标目录 copy: src: "{{ source_file_path }}" dest: /opt/ - name: 打印捕获到的文件名 debug: msg: "捕获到的文件名:{{ source_file_path | basename }}"
方案2:从copy模块返回值中提取
如果你需要从copy的执行结果里取路径再解析,也可以处理返回值里的src字段:
--- - name: 从执行结果捕获文件名 hosts: 你的目标主机组 gather_facts: no tasks: - name: 复制文件到目标目录 copy: src: /tmp/example.tar.gz dest: /opt/ register: copy_exec_result - name: 打印捕获到的文件名 debug: msg: "捕获到的文件名:{{ copy_exec_result.src | basename }}"
两种方案执行后都会在控制台输出你需要的纯文件名example.tar.gz。
内容的提问来源于stack exchange,提问作者vtr
相关产品推荐
相关产品推荐

