如何利用fileglob与循环实现文件复制并自定义重命名?
解决方案:Ansible 批量复制并重命名部门文件
核心问题分析
你当前的Playbook存在两个关键问题:
- 依赖CSV条目循环,导致同一部门被重复处理,且
fileglob | first仅获取部门下的第一个文件,遗漏其他文件 - 错误使用
item.id替代原文件名,未从文件路径中提取真实文件名
最优实现方式(无需CSV/Find模块)
直接通过fileglob lookup遍历所有目标文件,利用Ansible的路径过滤器拆分部门名和原文件名,简洁高效:
--- - name: Copy and rename department files hosts: localhost vars: destination_directory: "/tmp/dest" source_directory: "/tmp/source" tasks: - name: Create destination directory file: path: "{{ destination_directory }}" state: directory - name: Copy files with department prefix copy: src: "{{ item }}" dest: "{{ destination_directory }}/{{ item | dirname | basename }}.{{ item | basename }}" # 如果操作远程主机文件,需添加remote_src: true loop: "{{ lookup('fileglob', '{{ source_directory }}/*/*.txt', wantlist=True) }}"
关键逻辑说明
lookup('fileglob', ..., wantlist=True):获取所有符合/tmp/source/*/*.txt路径的文件列表item | dirname | basename:从文件路径中提取父目录名(即部门名,如HR、IT)item | basename:提取原文件名(如another_set.txt)- 拼接后的目标路径即为
部门名.原文件名格式
可选:基于CSV过滤部门
如果仅需处理CSV中出现的部门,可先提取唯一部门列表再遍历:
--- - name: Copy files filtered by CSV departments hosts: localhost vars: destination_directory: "/tmp/dest" source_directory: "/tmp/source" reference_csv: "./configs/02_names_department.csv" tasks: - name: Read CSV and get unique departments read_csv: path: "{{ reference_csv }}" register: csv_data - name: Create destination directory file: path: "{{ destination_directory }}" state: directory - name: Extract unique departments from CSV set_fact: unique_departments: "{{ csv_data.list | map(attribute='department') | unique | list }}" - name: Copy files for each department copy: src: "{{ file_path }}" dest: "{{ destination_directory }}/{{ department }}.{{ file_path | basename }}" loop: "{{ lookup('fileglob', '{{ source_directory }}/{{ department }}/*.txt', wantlist=True) }}" loop_control: loop_var: file_path vars: department: "{{ item }}" loop: "{{ unique_departments }}"
原Playbook问题修正总结
- 移除对CSV条目的循环,改为直接遍历文件或按唯一部门遍历
- 使用路径过滤器从文件路径中提取部门名和原文件名,替代
item.id的错误用法 - 避免
fileglob | first的限制,确保部门下所有文件都被处理
内容的提问来源于stack exchange,提问作者diaryfolio
相关产品推荐
相关产品推荐

