24

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 2

51

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

Sign up to request clarification or add additional context in comments.

6 Comments

Thanks for the reply. It seems that with_fileglob is suitable for most cases. However I don't think there is a way to do this kinda pattern matching directly on the remote machine? (For example if you want to copy all files that match the pattern from one place on the remote machine to another place on the remote machine?
Is the source and destination path both on remote machine?
By default I assume the src path always refers to the local machine, not to the remote.
Yes source path refers to the local. You want to copy files from remote machine A to remote machine A or remote machine A to remote machine B?
with_fileglob is used to copy files from the ansible server to the remote server. If you want to copy files inside the remote server, you need to use the first method.
|
24

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-*" 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.