Возможность рекурсивного удаления файлов с помощью регулярных выражений - PullRequest
0 голосов
/ 30 января 2019

У меня есть структура:

  • 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 

1 Ответ

0 голосов
/ 30 января 2019

patterns аргумент имеет тип list.Если Ansible обнаруживает строку, она преобразуется в список с использованием запятой в качестве разделителя.Таким образом, вы получите два шаблона:

        "patterns": [
            ".*?_(?!2)[0-9]{2",
            "}\\.(dat|DAT)"
        ],

Чтобы преодолеть это, передайте ваш шаблон в виде списка:

- name: find files
  find:
    paths: "dir1"
    patterns:
      - "{{ file_regex }}"
    use_regex: yes
    recurse: yes
  register: found_files
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...