Ansible copy files with wildcard?

Publish date: 2024-05-07

In my files directory I have various files, with a similar name structure:

data-example.zip data-precise.zip data-arbitrary.zip data-collected.zip 

I would like to transfer all of these files in the /tmp directory of my remote machine using Ansible without specifying each file name explicitly. In other words I would like to transfer every file that stars with "data-".

What is the correct way to do that? In a similar thread, someone suggested the with_fileglob keyword, - but I couldn't get that to work. Can someone provide me an example on how to accomplish said task?

2 Answers

Method 1: Find all files, store them in a variable and copy them to destination.

- hosts: lnx tasks: - find: paths="/source/path" recurse=yes patterns="data*" register: files_to_copy - copy: src={{ item.path }} dest=/dear/dir owner: root mode: 0775 with_items: "{{ files_to_copy.files }}" 

Use remote_src: yes to copy file in remote machine from one path to another.

Ansible documentation

Method 2: Fileglob

Fileglob allows using patterns to match files and directories

- name: Copy each file over that matches the given pattern copy: src: "{{ item }}" dest: "/etc/fooapp/" owner: "root" mode: 0600 with_fileglob: - "/playbooks/files/fooapp/*" 

Ansible documentation

6

Shortly after posting the question I actually figured it out myself. The with_fileglob keyword is the way to do it.

- name: "Transferring all data files" copy: src: "{{ item }}" dest: /tmp/ with_fileglob: "data-*" 

ncG1vNJzZmirpJawrLvVnqmfpJ%2Bse6S7zGiorp2jqbawutJobWtpYWuCdICOmqWsoZKhsm6vzqmwZp6ZobK0edaiq6Flp565pa%2FAq5s%3D