zsh - zmv - 如果有多个连续的大写字母,则不更改大小写

标签 zsh

我正在使用 following command

zmv -n -Q '(**/)(*[[:upper:]]*)(/)' '${1}${(L)${2//(#b)([[:upper:]])/-$match[1]}#-}'
改造
% tree
.
├── EmptyFile.txt
├── FirstDirectoryName
│   ├── FourthDirectoryName
│   ├── secondDirectoryName
│   └── thirdDirectoryName
├── FourthDirectoryName
├── secondDirectoryName
└── thirdDirectoryName
% tree
.
├── EmptyFile.txt
├── first-directory-name
│   ├── fourth-directory-name
│   ├── second-directory-name
│   └── third-directory-name
├── fourth-directory-name
├── second-directory-name
└── third-directory-name
不过有一个小问题。
如果有多个连续的大写字母,我不想小写。我只想放 -大写字母后面给出的不是开头。
% tree
.
├── DDDDDDD
├── FirstFolderToRename
│   ├── DDDDDDD
│   └── ThisIsDDDDD
├── secondFolderToRename
│   ├── DDDDDDD
│   └── ThisIsDDDDD
└── ThisIsDDDDD
电流输出
% zmv -n -Q '(**/)(*[[:upper:]]*)(/)' '${1}${(L)${2//(#b)([[:upper:]])/-$match[1]}#-}'
mv -- FirstFolderToRename/DDDDDDD FirstFolderToRename/d-d-d-d-d-d-d
mv -- FirstFolderToRename/ThisIsDDDDD FirstFolderToRename/this-is-d-d-d-d-d
mv -- secondFolderToRename/DDDDDDD secondFolderToRename/d-d-d-d-d-d-d
mv -- secondFolderToRename/ThisIsDDDDD secondFolderToRename/this-is-d-d-d-d-d
mv -- DDDDDDD d-d-d-d-d-d-d
mv -- FirstFolderToRename first-folder-to-rename
mv -- secondFolderToRename second-folder-to-rename
mv -- ThisIsDDDDD this-is-d-d-d-d-d
预期产出
mv -- FirstFolderToRename/DDDDDDD FirstFolderToRename/DDDDDDD
mv -- FirstFolderToRename/ThisIsDDDDD FirstFolderToRename/this-is-DDDDD
mv -- secondFolderToRename/DDDDDDD secondFolderToRename/DDDDDDD
mv -- secondFolderToRename/ThisIsDDDDD secondFolderToRename/this-is-DDDDD
mv -- DDDDDDD DDDDDDD
mv -- FirstFolderToRename first-folder-to-rename
mv -- secondFolderToRename second-folder-to-rename
mv -- ThisIsDDDDD this-is-DDDDD

最佳答案

指定 one or more upper case characters .即 [[:upper:]]##使用 zsh 的扩展通配符(zmv 使用)。 ##类似于正则表达式 +量词。单#zero or more , 类似于正则表达式 * .

zmv -n -Q '(**/)(*[[:upper:]]*)(/)' '${1}${(L)${2//(#b)([[:upper:]]##)/-$match[1]}#-}'
或者,单独转换前导大写字符而不是删除首字母 -然后:
${1}${(LM)2##[[:upper:]]#}${(L)${2##[[:upper:]]#}//(#b)([[:upper:]]##)/-$match[1]}

关于zsh - zmv - 如果有多个连续的大写字母,则不更改大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62850317/

相关文章:

linux - 如何使 ImageMagic 识别接受来自管道的输入?

shell - Makefile 命令与文件夹名称冲突

autocomplete - zsh 函数 : forward completion to subfunction

ruby-on-rails - Rails 一直告诉我它当前未安装

linux - eval $(docker-machine env myvm1) 不切换到 shell 与 myvm1 对话

shell - 如何使用 zsh 使向上和向下箭头键显示脚本中的历史条目?

bash - zshrc "command not found: npm"

vim - 根据我处于插入模式还是普通模式,如何在 vim 中更改光标样式?

zsh - 如何将 unicode 字符添加到 Zsh 提示中?

zsh - zsh 中不区分大小写的 glob 列表