Я использую следующую функцию для переименования файлов из верблюда Или pascal регистр в регистр шашлыка, учитывая, что мы проигнорируем последовательные прописные буквы.
function CamelOrPascalToKebab() {
zmv -Q '(**/)(*[A-Z]*)(/)' '$1${2//(#b)([a-z])([A-Z])/$match[1]-$match[2]}'
zmv -Q '(**/)(*[A-Z][a-z]*)(/)' '$1${2//(#m)[A-Z][a-z]/${(L)MATCH}}'
}
Итак, для следующих структура каталогов
% tree
.
├── DDDDDD
├── EmptyFile
├── EmptyFile.adoc
├── FirstDirToRename
│ ├── DDDDDD
│ ├── EmptyFile
│ ├── EmptyFile.adoc
│ ├── fourthDirToRename
│ ├── SecondDirToRename
│ └── ThisIsDDDDD
├── fourthDirToRename
├── SecondDirToRename
└── ThisIsDDDDD
результирующая структура каталогов после запуска функции будет
% tree
.
├── DDDDDD
├── EmptyFile
├── EmptyFile.adoc
├── first-dir-to-rename
│ ├── DDDDDD
│ ├── EmptyFile
│ ├── EmptyFile.adoc
│ ├── fourth-dir-to-rename
│ ├── second-dir-to-rename
│ └── this-is-DDDDD
├── fourth-dir-to-rename
├── second-dir-to-rename
└── this-is-DDDDD
Теперь мне нужна функция для go возврата к предыдущей структуре.
Я думаю, что процесс должен быть простым
- Первый символ с большой буквы
- Каждый символ после
-
- Удалить все
-
Я пытаюсь использовать следующее, чтобы использовать первый символ имени файла с заглавной буквы
function KebabToPascal () {
zmv -n -Q '(**/)(*-*)(/)' '$1${(U)2:0:1}${2#?}'
}
работает.
Как может выглядеть полная функция KebabToPascal
?