zmv - рекурсивно переименовывать каталоги из футляра для шашлыка в футляр для паспорта - PullRequest
0 голосов
/ 12 июля 2020

Я использую следующую функцию для переименования файлов из верблюда Или 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 возврата к предыдущей структуре.

Я думаю, что процесс должен быть простым

  1. Первый символ с большой буквы
  2. Каждый символ после -
  3. Удалить все -

Я пытаюсь использовать следующее, чтобы использовать первый символ имени файла с заглавной буквы

function KebabToPascal () {
    zmv -n -Q '(**/)(*-*)(/)' '$1${(U)2:0:1}${2#?}'
}

работает.

Как может выглядеть полная функция KebabToPascal?

1 Ответ

0 голосов
/ 26 августа 2020

Функция переименования файлов из футляра для шашлыка в футляр для шашлыка

function kebab-to-pascal () {
    zmv -Q '(**/)(*-*)(/)' '$1${(U)2:0:1}${2#?}'
    zmv -Q '(**/)(*-[a-z]*)(/)' '$1${2//(#m)-[a-z]/${(U)MATCH}}'
    zmv -Q '(**/)(*-*)(/)' '$1${2//-##/}'
}
...