Использование подстановки оболочки с шаблонами Ansible

Сzsh:

autoload zmv # best in ~/.zshrc
zmv 'folder(<2->)(#q/nOn)' 'folder$(($1 + 1))' &&
  mkdir folder2

Или для вашего автоматического переименования на основе наличия folder<n>_1папок:

setopt extendedglob
for dir ([-._[:alpha:]]##<->_1(N/nOn)) {
  [[ $dir = (#b)(*)(<->)_1 ]]
  zmv "($match[1])(<$match[2]->)(#q/nOn)" '$1$(($2 + 1))' &&
    mv "$dir" "${dir%_1}" || break
}

Пример:

до:

$ ls
bar1/  bar2/  bar2_1/  bar3/  foo1/  foo1_1/  foo1_3/  foo2/  foo3/  foo4/

после:

$ ls
bar1/  bar2/  bar3/  bar4/  foo1/  foo2/  foo3/  foo4/  foo5/  foo6/  
0
04.01.2020, 03:22
1 ответ

Обычно вы перебираете имена файлов, используя, например,. с _файловым глобусом:

---
- hosts: localhost
  gather_facts: false
  tasks:
    - name: Copy keys
      template:
        src: "{{ item }}"
        dest: "./pki/gf/{{ item|basename }}"
      with_fileglob: "gf/RPM-*"

Похоже, вы надеетесь выполнить это действие со списком каталогов, что немного сложнее. Однако нам повезло, потому что with_fileglobпринимает... список каталогов. Так что мы могли бы сделать что-то вроде этого:

---
- hosts: localhost
  gather_facts: false
  tasks:
    - name: Copy keys
      template:
        src: "{{ item }}"
        dest: "./pki/{{ '/'.join(item.split('/')[-2:]) }}"
      with_fileglob:
        - "gf/RPM-*"
        - "xz/RPM-*"

Это копирует файлы в ./pki/gf/RPM-...и ./pki/xz/RPM-.... Выражение '/'.join(item.split('/')[-2:])принимает имя пути, подобное /some/path/to/gf/RPM-foo, и преобразует его в gf/RPM-foo.

Обратите внимание, что сначала необходимо убедиться, что целевые каталоги существуют, что, вероятно, потребует отдельной задачи, предшествующей этой, для их создания.

0
28.01.2020, 02:58

Теги

Похожие вопросы