I want to list ONLY Filenames dev.xml and prd.xml that contain a word called “vob.fi.ted.com". Im able to list all filenames dev.xml and prd.xml using find module but when I use contains parameter in playbook it doesn’t return those files although they have the string in their contents.
- hosts: test
gather_facts: false
become: yes
become_user: root
tasks:
- name: Ansible find files examples
find:
paths: /opt/common
patterns: "dev.xml,prd.xml"
contains: "vob.fi.ted.com" -à This is not working
recurse: yes
register: files_to_find
- debug:
msg: "{{ files_to_find.files }}"
I get empty for list of files matched like below output.
However when I remove the contains: "vob.fi.ted.com" parameter , I get the list of matched files. All the files have 777 permission also.
I want to list ONLY Filenames dev.xml and prd.xml that contain a word called “vob.fi.ted.com". Im able to list all filenames dev.xml and prd.xml using find module but when I use contains parameter in playbook it doesn’t return those files although they have the string in their contents.
- hosts: test
gather_facts: false
become: yes
become_user: root
tasks:
- name: Ansible find files examples
find:
paths: /opt/common
patterns: "dev.xml,prd.xml"
contains: "vob.fi.ted.com"
recurse: yes
register: files_to_find
- debug:
msg: "{{ files_to_find.files }}"
I get empty for list of files matched like below output.
However when I remove the contains: "vob.fi.ted.com" parameter , I get the list of matched files. All the files have 777 permission also.
contains is regex patterns, with this expression you would only find file that only contain that string and nothing more.
To make it find files containing that string you need to have a .* on the start and at the end.
. in regex means any character, since you mean literally . and not any character you need to escape the . with \
so you contains should be
contains: .*vob\.fi\.ted\.com.*