[SOLVED] zsh - zmv - do not change case if there are more than one consecutive uppercase letters
by blueray from LinuxQuestions.org on (#55K4Z)
I am using the following command
Code:zmv -n -Q '(**/)(*[[:upper:]]*)(/)' '${1}${(L)${2//(#b)([[:upper:]])/-$match[1]}#-}'to transform
Code: % tree
.
EmptyFile.txt
FirstDirectoryName
FourthDirectoryName
secondDirectoryName
thirdDirectoryName
FourthDirectoryName
secondDirectoryName
thirdDirectoryNameTo
Code: % tree
.
EmptyFile.txt
first-directory-name
fourth-directory-name
second-directory-name
third-directory-name
fourth-directory-name
second-directory-name
third-directory-nameHowever there is a small problem.
I do not want to lowercase if there are more than one consecutive uppercase letters. I just want to put `-` behind the capital letters given it is not in the beginning.
Code: % tree
.
DDDDDDD
FirstFolderToRename
DDDDDDD
ThisIsDDDDD
secondFolderToRename
DDDDDDD
ThisIsDDDDD
ThisIsDDDDDCurrent Output
Code: % 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-dExpected Output
Code: 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


Code:zmv -n -Q '(**/)(*[[:upper:]]*)(/)' '${1}${(L)${2//(#b)([[:upper:]])/-$match[1]}#-}'to transform
Code: % tree
.
EmptyFile.txt
FirstDirectoryName
FourthDirectoryName
secondDirectoryName
thirdDirectoryName
FourthDirectoryName
secondDirectoryName
thirdDirectoryNameTo
Code: % tree
.
EmptyFile.txt
first-directory-name
fourth-directory-name
second-directory-name
third-directory-name
fourth-directory-name
second-directory-name
third-directory-nameHowever there is a small problem.
I do not want to lowercase if there are more than one consecutive uppercase letters. I just want to put `-` behind the capital letters given it is not in the beginning.
Code: % tree
.
DDDDDDD
FirstFolderToRename
DDDDDDD
ThisIsDDDDD
secondFolderToRename
DDDDDDD
ThisIsDDDDD
ThisIsDDDDDCurrent Output
Code: % 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-dExpected Output
Code: 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