【问题标题】:zmv - rename directories recursively from kebab case to pascel casezmv - 从 kebab case 到 pascal case 递归地重命名目录
【发布时间】:2020-08-26 08:16:25
【问题描述】:

鉴于我们将忽略连续的大写字母,我正在使用以下 function 将文件从骆驼或帕斯卡大小写重命名为 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 函数可能是什么样的?

【问题讨论】:

    标签: zsh


    【解决方案1】:

    将文件从kebab case重命名为pascel case的功能

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 2018-11-26
      • 2011-05-20
      • 2022-08-15
      • 2019-07-06
      相关资源
      最近更新 更多