У меня есть структура:
- dir1
- subdir1
- fileX_001.dat
- fileX_2001.dat
- fileX_002.dat
- fileX_2002.dat
- fileY_001.dat
- fileY_2001.dat
- ...
- subdir2
- fileX_001.dat
- fileX_2001.dat
- fileX_002.dat
- fileX_2002.dat
- ...
Из каталога1Я хочу рекурсивно удалить все файлы, которые соответствуют регулярному выражению: .*?_(?!2)[0-9]{2,}\.(dat|DAT)
(все, что находится в начале, не сопровождается 2, сопровождается как минимум 2 цифрами и заканчивается .dat / .DAT).Файлы, которые должны совпадать и удаляться, выделены жирным шрифтом.
Я попытался:
- name: delete files
shell: 'ls -R | grep -P ".*?_(?!2)[0-9]{2,}\.(dat|DAT)" | xargs -d"\n" rm'
args:
chdir: 'dir1'
, но не удалось (rm
не удалось найти файлы в каталоге).
Я также пробовал:
file_regex: '.*?_(?!2)[0-9]{2,}\.(dat|DAT)'
- name: find files
find:
paths: "dir1"
patterns: "{{ file_regex }}"
use_regex: yes
recurse: yes
register: found_files
- name: delete files
file:
path: '{{ item.path }}'
state: absent
with_items: '{{ found_files.files }}'
, но, похоже, файл не найден.Выход:
13:15:30 TASK [myrole : find files]
...
13:15:30 Wednesday 30 January 2019 14:15:30 +0200 (0:00:01.008) 0:00:40.241 *****
13:15:30 ok: [xxx.xxx.xxx.xxx.xxx] => {"changed": false, "examined": 483, "files": [], "matched": 0, "msg": ""}
13:15:30
13:15:30 TASK [myrole : delete files]
...
13:15:30 Wednesday 30 January 2019 14:15:30 +0200 (0:00:00.350) 0:00:40.592 *****
13:15:30