С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/
Обычно вы перебираете имена файлов, используя, например,. с _файловым глобусом:
---
- 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
.
Обратите внимание, что сначала необходимо убедиться, что целевые каталоги существуют, что, вероятно, потребует отдельной задачи, предшествующей этой, для их создания.