zmv-将目录从kebab情况递归重命名为pascel情况



我使用以下函数将文件从camel或pascal大小写重命名为kebab大小写,因为我们将忽略连续的大写字母。

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

现在我需要一个函数来返回到以前的结构。

我认为这个过程应该是简单的

  1. 第一个字符大写
  2. -之后的每个字符大写
  3. 删除所有-

我正在尝试以下操作将文件名的第一个字符大写

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

正在工作。

完整的KebabToPascal函数可能是什么样子的?

将文件从kebab案例重命名为pascel案例的函数

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//-##/}'
}

相关内容

最新更新